Javascript ES6。 ===和Object.is

时间:2017-04-18 16:19:44

标签: javascript comparison-operators

我们知道=====之间的区别是什么 - 基本上,===会阻止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在比较参数方面更加严格,如果是这样,问题就会增加 - 非严格是===(称为“严格平等”):)

2 个答案:

答案 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方法),而不是计算周围计算可能如何影响你在比较中遇到的任何零的标志。