【问题标题】:Javascript ES6. Difference between === and Object.is [duplicate]Javascript ES6。 === 和 Object.is 之间的区别 [重复]
【发布时间】:2017-04-18 16:19:44
【问题描述】:

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

【问题讨论】:

    标签: javascript comparison-operators


    【解决方案1】:

    来自您链接的文章:

    何时使用 Object.is 与三等号

    除了处理 NaN 的方式之外,一般来说,Object.is 对零的特殊行为可能会引起兴趣的唯一时间是追求某些元编程方案,尤其是当您需要属性描述符时努力反映 Object.defineProperty 的一些特性。如果您的用例不需要这样做,建议避免使用 Object.is 并改用 ===。即使您的要求涉及将两个 NaN 值之间的比较评估为 true,通常情况下,对 NaN 检查进行特殊处理(使用 ECMAScript 以前版本中可用的 isNaN 方法)也比弄清楚周围计算如何影响您在比较中遇到的任何零的符号。

    【讨论】:

    • 那篇文章太长了,我只是找图。谢谢:)
    • 我个人觉得 JS 中的 4 种相等类型有点多。尤其是 SameValue vs SameValueZero ...呃。
    • 是的,这正是我开始学习 JS 'In The Hard Way' 的原因——首先学习引擎盖下的东西......
    • :D 哦,这很好:)
    【解决方案2】:

    通过MDN

    这也不等于根据 === 运算符相等。 === 运算符(以及 == 运算符)将数值 -0 和 +0 视为相等,并将 Number.NaN 视为不等于 NaN。

    【讨论】:

    • 啊,原来是一种方法。。嗯。。还以为是比较呢。。不过,比较也是一种方法吧?谢谢,我使用 Javascript 的第一天..
    • @J.D.:它一个比较:在你给它的两个参数中,是否相等(根据一个相等的定义;JavaScript 至少有四个)。 :-)
    • @T.J.克劳德,所以你也说运算符不存储在内存中(执行上下文),就像函数一样,对吧?让我感到困惑的是来自 MDN 的这一行 - The Object.is() method determines whether two values are the same value. - 他们写的是 method...
    • @J.D.:Object.is一种方法。 === 是一个运算符。
    • @T.J. Crowder - 这正是让我感到困惑的地方 - 在 ES6 中,他们添加了一个新的运算符,这也是一种方法 :) 非常有趣。谢谢分享!
    猜你喜欢
    • 2017-04-11
    • 1970-01-01
    • 2018-04-17
    • 2015-09-03
    • 2010-10-06
    • 2018-09-20
    • 2011-11-05
    • 1970-01-01
    相关资源
    最近更新 更多