ES中的 == 和 === 都很熟悉了。
两者的区别:
== 在类型相同时,使用 === 判断,=== 在类型不同时直接
false== 会在类型不同时,发生隐式转换
规则如下:
(1)一个
null,一个undefied,那么true(2)一个字符串,一个数值,会把字符串转成数值之后再进行比较
熟悉ES6不会对Object.is()陌生
NaN独白:懂我的人终于出现(≧▽≦)/啦
1 | Object.is(NaN, NaN) // true |
在js中我们一般认为正负0是不相等的,然而===情况下NaN不等于NaN,+0等于-0
简单实现
1 | if (!Object.is) { |
这里重点提到ES标准中的 SameValueZero 算法
1 | const s = new Set() |
和Object.is()比较算法的区别就在 +0 和 -0是一样的。
1 | const a = [0, NaN] |
可以看出includes也是基于 SameValueZero 来比较的。