我们知道==
和===
之间的区别是什么 - 基本上,===
会阻止Javascript引擎转换其中一个参数来生成相同类型的两个参数。但是现在,在 ES6 中,出现了一个新的运算符 - Object.is
,这有点令人困惑(或者===
现在可能令人困惑......)
从Mozila网站(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness)我们可以看出差异:
相同比较:
x y == === Object.is
+0 -0 true true false
NaN NaN false false true
所以,对我来说,看起来像Object.is
在比较参数方面更加严格,如果是这样,问题就会增加 - 非严格是===
(称为“严格平等”):)
答案 0 :(得分:1)
通过MDN:
根据===运算符,这也不相同。 ===运算符(以及==运算符)将数值-0和+ 0视为相等,并将Number.NaN视为不等于NaN。
答案 1 :(得分:1)
来自你链接的文章:
何时使用Object.is与triple equals
除了它对待NaN的方式之外,通常,Object.is对零的特殊行为可能引起关注的唯一时间是追求某些元编程方案,特别是关于属性描述符,当你需要它时工作来镜像Object.defineProperty的一些特性。如果您的用例不需要这样,建议避免使用Object.is并使用===。即使您的要求涉及将两个NaN值之间的比较评估为真,通常更容易特殊情况下NaN检查(使用以前版本的ECMAScript中提供的isNaN方法),而不是计算周围计算可能如何影响你在比较中遇到的任何零的标志。