我们都知道 JavaScript 是松散类型,并且在某些情况下,当使用 ==
来做等值比较时,会给你意想不到的结果。这是因为使用 ==
做等值比较时,JavaScript 会对2个比较的值进行隐式强制转换。
0 == ' ' //true null == undefined //true [1] == true //true
所以 JavaScript 还为我们提供了三个等号运算符 ===
,它更严格,不强制转换比较值,但实用 ===
比较有些时候也不是最好的解决方案:
NaN === NaN //false
有个好消息是,在 ES6 中有一个新的更好更准确的办法 Object.is()
,它与 ===
具有相同的功能,而且在一些特殊情况下表现良好:
Object.is(0 , ' '); //false Object.is(null, undefined); //false Object.is([1], true); //false Object.is(NaN, NaN); //true
Mozilla 团队不认为 Object.is
比 ===
更“严格”。他们说我们应该考虑这种方法来处理 NaN
,-0
和 +0
, 但总的来说,我认为 Object.is
在实际应用中是一个很好的做法。
下面这张图详细说明了 ==
,===
和 Object.is()
等值比价的异同:
最新评论
写的挺好的
有没有兴趣翻译 impatient js? https://exploringjs.com/impatient-js/index.html
Flexbox playground is so great!
感谢总结。
awesome!
这个好像很早就看到类似的文章了
比其他的教程好太多了
柯理化讲的好模糊…没懂