javaScript中的相等性判断一般包括以下四种情况:
(1)严格相等(===)
不仅会比较值是否相等,还会比较类型是否相等,这里有一个特殊情况是 +0 === -0
(2)非严格相等(==)
比较前会进行相应的[隐式类型转换](https://blog.csdn.net/m0_38102188/article/details/87167526)。
(3)同值相等(Object.is)
需要注意的是Object.is(NaN, NaN)返回的结果是true,也就是同值相等的判断中认为NaN和NaN是相等的,
这与上述的严格相等和非严格相等都不同。同时同值相等会将-0和+0判断成不相等,这与其他三种相等性判断都不一样。
(4)零值相等
和同值相等类似,但是会将+0和-0认为是相等的。目前js中没有提供相应的方法对零值相等进行判断。
因此除了数据类型的判断(=== 和 ==)不同以外,以上四种相等性判断主要是集中在对NaN的判断和+0/-0判断的不同。
最后附上一张相等性判断的模型:
补充:
这里要补充的一点是对于一个数字是否是NaN的判断,有以下两种方法:
(1)isNaN
该方法会先进行类型转换,如isNaN(‘a’)是先将‘a’转换成数字,得到NaN,然后再进行判断,显然返回的结果是true。
(2)Number.isNaN
该方法是es6新增的方法,判断前不会进行类型转换,因此对是否是NaN的判断更加准确。
参考:
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Equality_comparisons_and_sameness