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
来比较的。