JavaScript中,Object.is()、== 、 ===的区别。

129 阅读1分钟

简单来说,'==' 表示等于,是相等运算符;
'==='表示值相等并且类型相同,是全等运算符;
最显著的区别是,如果操作数的类型不同,== 运算符会在比较之前尝试将它们转换为相同的类型。
'==='不尝试类型转换,始终将不同类型的操作数视为不同。
如果两个操作数都是对象,则仅当两个操作数都引用同一个对象时才返回true
对于'=='来说,当两边的数值类型不同时:

  1. 当数字以字符串比较,会将字符串转换为数字值
  2. 如果某一操作数是Boolean,则将布尔操作数转换为1或0
  3. 如果某一操作数是对象,会尝试使用对象的valueOf和toString方法将其转换为初始值。

使用Object.is()来进行相等判断时,一般情况下和三等号的判断相同,它处理一些特殊的情况 ,比如-0和+0不再相等,两个NaN是相等的。

notice
NaN是number类型
null == undefined ==> true
null === undefined ==> false
typeof null => object
typeof undefined => obdefined

字符串的话,讲究顺序。
引用类型是存在堆里的!