为什么你应该在相等比较中使用 Object.is()
我们都知道 JavasSript 是弱类型的,并且当我们使用 ==
作比较时,在一些情况下由于类型转换或者说“把两个操作数中的一个转换成另一个,然后在比较”,会出现意想不到的结果。
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。但是总的来说, 我认为它在实际应用中是一个很好的实践。
现在来看看这张图表的对比…
References:
MEET THE NEW JSTIPS BOOK
You no longer need 10+ years of experience to get your dream job.
Use the 100 answers in this short book to boost your confidence and skills to ace the interviews at your favorite companies like Twitter, Google and Netflix.
GET THE BOOK NOW
MEET THE NEW JSTIPS BOOK
The book to ace the JavaScript Interview.
A short book with 100 answers designed to boost your knowledge and help you ace the technical interview within a few days.
GET THE BOOK NOW