我们知道==和===之间的区别--基本上,===阻止Javascript引擎转换其中一个参数,以使这两个参数都具有相同的类型。但是现在,在ES6中,出现了一个新的操作符-- Object.is,这有点让人困惑(或者===现在令人困惑.)
从Mozila网站(同一性)我们可以看到不同之处:
同一性比较:
x y == === Object.is
+0 -0 true true false
NaN NaN false false true因此,对我来说,看起来Object.is在比较参数方面更加严格,如果是的话,问题就产生了-- ===有多不严格(称为“严格平等”) :)
发布于 2017-04-18 16:28:05
从你链接的那篇文章中:
何时使用Object.is与三重等于
除了对待NaN的方式外,Object.is对零的唯一特殊行为可能是对某些元编程方案的追求,特别是当您的工作需要反映Object.defineProperty的某些特性时,尤其是在属性描述符方面。如果您的用例不需要这一点,则建议避免使用Object.is,而使用===。即使您的需求涉及对两个NaN值的比较结果为真,通常情况下,特殊情况下的NaN检查(使用以前版本的ECMAScript中可用的isNaN方法)要比计算周围的计算如何影响您在比较中遇到的任何零的符号要容易。
发布于 2017-04-18 16:22:52
通过MDN
根据===运算符,这与相等也不一样。===运算符(以及==运算符)将数字值-0和+0视为相等,并将Number.NaN视为不等于NaN。
https://stackoverflow.com/questions/43477383
复制相似问题