==与===的区别

区别

==(相等):先转换再比较

===(全等):仅比较而不转换

问题
true=="true"      //false
undefined==null   //true
{}=={}            //false
特殊值的比较
  • NAN 不等于任何值, 规定NaN 也不等于 NaN,所以在判断值是否为NAN时,会使用isNaN()
  • undefined和null的比较
    • 要比较相等性之前,不能将 null 和 undefined 转换成其他任何值。
    • null 和 undefined 是相等的,但是不全等。
表达式
null == undefined true
null === undefined false
null==true、null==false、undefined==1(null,undefined不会进行转换) false
NAN==NAN false

(==)如果两个操作数的类型相同,就不用进行转换数据类型,但是在不同时会转换数据类型再进行转换

类型相同的比较(==、===)
  • 两个操作数都为引用类型(对象、数组),那么会比较他们栈地址,就是引用地址
    • {}=={}的比较为false,因为他们是两个对象;如果想判断对象是否为空,使用JSON.stringify({})=="{}"判断
  • 两个操作数为值类型(字符串、数值、布尔类型、null、undefined),就可以直接比较
(==)比较转换的优先级
  • 向数字转换,比如true=="true"不会转向左边的布尔类型,也不会转向右边的字符串类型,会使两边转为数字再进行比较,转为:1==NAN 再比较,所以比较结果为false
  • 如果一个操作数是对象,则调用对象的 valueOf() 方法,用得到的基本类型值按照前面的规则进行转换比较。
编程建议

推荐使用全等和不全等操作符,避免类型的转换带来的影响。

你可能感兴趣的:(==与===的区别)