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

不相等运算符

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

最新文章

  1. ZeroMQ(ZMQ)函数接口英汉直译
  2. C语言中的运算符
  3. win7或win2008 R2 被远程登录日志记录 系统日志
  4. WPF RichTextBox设置文本颜色
  5. paper 79:MATLAB函数,interp1
  6. 【linux】如何查看和解压缩rpm文件内容
  7. Fatal error: Class &#39;GearmanClient&#39; not found解决方法
  8. .NET判断某一年的所有放假的日期
  9. 191. Number of 1 Bits
  10. 垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
  11. 服务器是windows时tomcat无法打印所有日志配置修改
  12. Android高德地图自定义Markers的例子
  13. php 连接 mssql sql2008
  14. bzoj1061--线性规划
  15. Java中abstract和interface的区别
  16. --save 和 --save-dev的区别
  17. CCF系列之日期计算(201509-2)
  18. introduce of servlet and filter
  19. GitHub的Windows客户端的使用教程
  20. [javaEE] HTTP协议总结

热门文章

  1. PyTorch图文安装教程(Win10),含遇到的问题及解决办法
  2. uniapp 微信发送订阅消息
  3. Argo workflow 案例练习和配置详细解析
  4. .NET 云原生架构师训练营(权限系统 系统演示 ActionAccess)--学习笔记
  5. 树莓派GPIO开发(三):蜂鸣器-PWM调节
  6. Fedora 30的升级方法
  7. Python 中的闭包和自由变量
  8. LINUX服务器常用命令
  9. idea教程--快速插入依赖
  10. Pandas:从CSV中读取一个含有datetime类型的DataFrame、单项时间数据获取