JavaScript一共提供了8个比较运算符:
  • > 大于运算符
  • < 小于运算符
  • <= 小于等于运算符
  • >= 大于等于运算符
  • == 相等运算符
  • === 严格相等运算符
  • != 不相等运算符
  • !== 严格不相等运算符

非相等的比较

对于非相等的比较,算法是先看两个运算子是否全是字符串,如果都是字符串的话,就按照Unicode码的大小一个字符一个字符来比较;否则的话,将两个运算子都转成数值,再比较大小

  1. 字符串的比较是按照字典(Unicode)顺序进行比较的.
  2. 非字符串的比较
    • 原始值类型
      先转换成数值然后再比较
      注意点: 任何值与NaN(包括NaN)比较,都返回false
    • 对象
      如果运算子是对象,会转为原始类型的值再进行比较
      对象转换为原始类型的值,算法是先调用对象的valueOf方法;如果返回的还是对象,再接着调用toString方法。
      var x = [2];
      // 输出true
      // x的valueOf()返回[2],是对象类型,所以再调用toString(),结果是"2">"11",因为两个都是字符串,所以先比较第一个字符,"2">"1",返回true
      x > '11' x.valueOf = function(){ return '2'; }
      // 返回false,因为x是对象,对象的比较先调用对象的valueOf()将对象转为原始值类型,x的valueOf()方法返回的是基本类型,不再调用toString(),结果为'2'>'21',返回false
      x > '21'

相等运算符和严格相等运算符

相等运算符(==)比较的是两个值是否相等,严格相等运算符(===)比较是否为'同一个值'; '==='先比较类型,如果类型不一样,则直接返回false, '=='会先将他们转换为同一个类型,再用严格相等运算符进行比较
两个复合类型(对象,数组,函数)的数据比较时,不是比较它们的值是否相等,而是比较它们是否指向同一个地址
注意: 对于两个对象的比较,严格运算符比较的是地址,而大于或小于运算符比较的是值

严格不相等运算符

严格不相等运算符的算法是先求严格运算符的结果,然后再返回相反值

相等运算符

相等运算符比较同类型的数据时,与严格相等运算符完全一样;比较不同类型的数据时,相等运算符会先将数据类型转换,然后再用严格相等运算符比较

  1. 原始数据类型会先转换成数值再进行比较(字符串转换为数字时,会省略前置和后置空格)

    // 等同于1 === Number(true)
    1 == true // true // false 等同于 Number('true') === Number(true) ==> NaN === 1
    'true' == true
  2. 对象与原始类型值比较
    1. 对象与数值类型比较,对象转为数值
    2. 对象与字符串类型比较,对象转为字符串
    3. 对象与布尔值比较时,两边都是数值
    // 对象与数值类型比较,对象转为数值
    // true 等同于 Number([2]) == 2
    [2] == 2 // 对象与字符串比较,对象转为字符串
    // true 等同于 String([3,4]) == '3,4'
    [3,4] == '3,4' // 对象与布尔值比较,两边都转为数值
    // false 等同于 Number([5]) == Number(true)
    [5] == true
  3. null和undefined与其他类型的值比较时,结果都为false,他们相互比较时为true: null == undefined // true
  4. 相等运算符隐藏的类型转换,会带来违反直觉的结果,因此不建议使用想的运算符(==),最好只使用严格相等运算符(===): 0 == '' 返回true

不相等运算符

它的算法就是先求相等运算符的结果,然后再返回相反值

javascript的比较运算符的更多相关文章

  1. (转)JavaScript中的运算符优先级

    JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低的优先级列出J ...

  2. JavaScript基础——使用运算符

    JavaScript运算符允许你改变一个变量的值.你已经熟悉了用于赋值给变量的=运算符.JavaScript提供了几种不同的运算符,它们可以划分为两大类:算数运算符和赋值运算符. 1.算数运算符 你可 ...

  3. JavaScript中“typeof”运算符与“instanceof”运算符的差异

    在JavaScript中,运算符“typeof”和“instanceof”都可以用来判断数据的类型,那么这两个运算符有什么不同之处呢? 差异一:使用方式不同. 最明显的差异就是这两个运算符的使用方式了 ...

  4. JavaScript中的运算符种类及其规则介绍

    JavaScript中的运算符有很多,主要分为算术运算符,等同全同运算符,比较运算符,字符串运算符,逻辑运算符,赋值运算符等.这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScri ...

  5. JavaScript 基本语法 -- 运算符的优先级

    在所有的运算里,都是有运算顺序的.小时候学四则运算的时候,我们都知道这么一个规则:先乘除后加减,有括号要先算括号! 同样的,在JavaScript里面,运算符也是有相应的优先级的.其优先级如下表所示, ...

  6. JavaScript中逗号运算符

    JavaScript中逗号运算符(,)是顺序执行两个表达式.使用方法: expression1, expression2 其中expression1是任何表达式. expression2是任何表达式. ...

  7. JavaScript学习系列7 -- JavaScript中的运算符

    今天,我们来说一说JavaScript中的运算符,首先我们来讲一讲 一元运算符 JavaScript中的一元运算符有以下几种 1. delete delete 运算符主要用于删除对以前定义的对象属性或 ...

  8. 【废弃中】JavaScript 式与运算符

    创建: 2017/09/25 更新: 2019/01/14 修改标题 [JavaScript 式与运算符] ->  [JavaScript 式与主要Object的方法] 更新: 2019/02/ ...

  9. JavaScript按位运算符~

    1. JavaScript按位运算符 Bit operators work on 32 bits numbers. 2. JavaScript按位运算符~ 值得注意的是,在JavaScript中,~5 ...

  10. JavaScript权威设计--JavaScript表达式与运算符,语句(简要学习笔记六)

    1.delete是一元操作符,用来删除对象属性或者元素. var a={ x:1, y:2 } delete a.x; //删除x属性 “x”in a //false:a对象中已经不存在x属性 ale ...

随机推荐

  1. java集合专题 (ArrayList、HashSet等集合底层结构及扩容机制、HashMap源码)

    一.数组与集合比较 数组: 1)长度开始时必须指定,而且一旦指定,不能更改 2)保存的必须为同一类型的元素 3)使用数组进行增加/删除元素-比较麻烦 集合: 1)可以动态保存任意多个对象,使用比较方便 ...

  2. JDK、JRE 和 JVM 有什么用,它们是怎样运行的

    JDK如何运作? JDK 功能 以下是JDK的重要组件: JDK 和 JRE:程序员通过使用JDK 创建由 JRE 运行的 Java 程序,其中包括 JVM 和类库. 类库:是一组可动态加载的库,Ja ...

  3. Ansible部署K8s集群

    目录 检查网络:k8s-check.yaml 连接配置:k8s-conn-cfg.yaml 配置k8s集群dns解析: k8s-hosts-cfg.yaml 配置yum源:k8s-yum-cfg.ya ...

  4. 选择自助式BI平台的六大标准

    ​自助式BI平台面向的是不具备IT背景的业务分析人员,与传统BI相比更灵活且易于使用,而且一定程度上摆脱对IT部门的大幅度依赖,代表性的自助BI工具厂商如Tableau.思迈特的Smartbi Eag ...

  5. 数据分析需要学什么?BI工具有速成?

    ​我们都知道,成为一个数据分析师的必经之路,必须要会使用SQL和R语言.假如你想学会数据分析的话,先别着急着学编程技术,先学好excel,把excel真正学会了,操作熟练了,会做常用函数公式,数据透视 ...

  6. dockerfile 使用 entrypoint,导致 docker 无法正确挂载的问题

    一开始 Dockerfile 如下: FROM golang:latest WORKDIR $GOPATH/src/hellodocker COPY . .RUN go build . EXPOSE ...

  7. 商城秒杀系统总结(Java)

    本文写的较为零散,对没有基础的同学不太友好. 一.秒杀系统项目总结(基础版) classpath 在.properties中时常需要读取资源,定位文件地址时经常用到classpath 类路径指的是sr ...

  8. 量化研究之“大A打板敢死队”是如何做换手板与撬板的?

    更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流. 涨停跌停板分类 涨停.跌停是A股特有的现象,其他主要市场,例如美股.港股都不存在涨跌停的规则.涨停.跌停 ...

  9. low-code

    low-code特点: 1. 一个创造软件的开发环境,类似vs-code: 2. 通过可视化拖拽和参数配置高效开发. 1. 背景 1.1 目标 需求的交付质量和交付效率一直是中后台项目开发中非常关注的 ...

  10. Qt:QMap

    0.说明 QMap < Key , T > 一个QMap就是一个K-V对,也可以说是字典对象. 1)构造 构造一个Key是QString,Value是int的QMap: QMap<Q ...