【问题标题】:How to test same object instance in Javascript?如何在 Javascript 中测试相同的对象实例?
【发布时间】:2014-11-30 15:18:54
【问题描述】:

假设我在 Javascript 中有以下对象:

var a = { xxx: 33 };
var b = { xxx: 33 };
var c;

c = a;

什么是 Javascript 测试可以告诉我是否正在处理同一个对象实例?换句话说,对于 a 和 b、b 和 c,它应该返回 false,但对于 a 和 c,它应该返回 true。

【问题讨论】:

    标签: javascript instance


    【解决方案1】:

    你只需要这个

    if(c == a) {
       // same instance
    }
    

    a == bb == c 将返回 false

    【讨论】:

    • 而这对我来说实际上是 JS 中的一个错误。 == 应该是值比较,而 === 值+类型比较。在我看来,a == b 应该返回 true,a === b 返回 false。相反,您必须使用 JSON 操作将其分解为字符串值并执行值的比较。就是现在这样,== 和 === 对象比较没有区别。
    【解决方案2】:

    只是一个标准的平等测试:

    ( a == c ) // true
    ( a == b ) // false
    

    【讨论】:

    • 为什么不三等分?
    • @san.chez — 比较对象时没有区别。
    • @san.chez,here 没有区别,但要关闭我不希望的功能,我会在此处(以及几乎所有地方)使用三等式。跨度>
    【解决方案3】:

    我知道问题是关于检查两个对象是否是同一个实例,但是如果没有以下内容,这个线程将不完整。

    如果您在检查 2 个对象是否相同之后,双相等 == 就足够了。但是,对于值类型(原语),您可能会感到惊讶。查看以下内容:

    var a = 1;  // Integer 1
    var b = '1' // String '1'
    if (a == b) console.log('Same.');
    else console.log('Not same.');
    

    上面将打印Same.。为避免这种情况,请使用三等号 ===,这意味着两件事:

    1. 它们的值是否相同?
    2. 它们是同一类型吗?

    或者您可以使用Object.is 方法,例如Object.is(a, b)

    if (a === b) console.log('Same.');
    else console.log('Not same.');
    if (Object.is(a, b)) console.log('Same for Object.is.');
    else console.log('Not same for Object.is.'); 
    

    上面将打印Not same.Not same for Object.is.

    更多信息

    以下是从article复制/粘贴的更多信息:

    您选择哪种操作取决于您希望执行的比较类型。简要说明:

    • double equals (==) 将在比较两个事物时执行类型转换,并且会特别处理 NaN、-0 和 +0 以符合 IEEE 754(因此 NaN != NaN 和 -0 == +0 );

    • 三等号 (===) 将进行与双等号相同的比较(包括对 NaN、-0 和 +0 的特殊处理),但不进行类型转换;如果类型不同,则返回 false。

    • Object.is 不进行类型转换,也不对 NaN、-0 和 +0 进行特殊处理(赋予它与 === 相同的行为,除了那些特殊的数值)。

    请注意,它们之间的区别都与它们对原语的处理有关;他们都没有比较参数在结构上是否在概念上相似。对于任何具有相同结构但本身是不同对象的非原始对象 x 和 y,上述所有形式都将评估为 false。


    结论

    我的两分钱就是养成始终使用三等号=== 的习惯,因为它不会伤害你,但双等号== 确实会伤害你时间>。当您只关心值并且您正在比较的事物是原语时,您可以使用 double equals ==;但即使这样也不鼓励,因为它主要意味着设计上的缺陷。像 TypeScript 这样的语言甚至会避免这种情况,即将 '1' 与 1 进行比较而不明确说明。

    【讨论】:

      猜你喜欢
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 2019-04-03
      • 2021-09-21
      • 2019-12-19
      • 2012-10-20
      • 1970-01-01
      相关资源
      最近更新 更多