Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

为什么你应该在相等比较中使用 Object.is() #65

Open
susouth opened this issue Dec 9, 2019 · 0 comments
Open

为什么你应该在相等比较中使用 Object.is() #65

susouth opened this issue Dec 9, 2019 · 0 comments
Labels
JavaScript 跟js相关的面试题 No.68

Comments

@susouth
Copy link
Contributor

susouth commented Dec 9, 2019

📚在线阅读:为什么你应该在相等比较中使用 Object.is() - No.68

我们都知道 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。但是总的来说, 我认为它在实际应用中是一个很好的实践。

现在来看看这张图表的对比...

differences of operators in equality comparisons javascript

References:

Equality comparisons and sameness

扩展阅读:

@susouth susouth added JavaScript 跟js相关的面试题 No.68 labels Dec 9, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
JavaScript 跟js相关的面试题 No.68
Projects
None yet
Development

No branches or pull requests

1 participant