==与===的区别

区别

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

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

问题
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() 方法,用得到的基本类型值按照前面的规则进行转换比较。
编程建议

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容