JavascriptES6。 === 和 Object.is 之间的区别

Javascript ES6. Difference between === and Object.is

我们知道 ===== 之间的区别是什么 - 基本上,=== 阻止 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 在比较参数方面更加严格,如果是这样,问题就来了 - ===(称为 "Strict Equality")有多不严格:)

通过MDN:

This is also not the same as being equal according to the === operator. The === operator (and the == operator as well) treats the number values -0 and +0 as equal and treats Number.NaN as not equal to NaN.

来自您链接的文章:

何时使用 Object.is 与三等号

除了它对待 NaN 的方式之外,一般来说,Object.is 对零的特殊行为可能唯一感兴趣的是追求某些元编程方案,特别是关于 属性 描述符,当您的作品需要反映 Object.defineProperty 的某些特征时。如果您的用例不需要这个,建议避免使用 Object.is 并使用 === 代替。即使您的要求涉及将两个 NaN 值之间的比较计算为真,通常情况下对 NaN 检查进行特例检查(使用以前版本的 ECMAScript 中可用的 isNaN 方法)比计算周围的计算可能如何影响更容易您在比较中遇到的任何零的符号。