【问题标题】:Empty array does not equal itself in Javascript?空数组在Javascript中不等于自身?
【发布时间】:2014-04-21 09:29:54
【问题描述】:

我遇到过一种情况,在 Javascript 中 [] == []false

有人可以解释为什么吗?

【问题讨论】:

标签: javascript


【解决方案1】:

对象通过引用相等,[] 是一个新对象有一个新的引用,右手[] 也是一个全新的对象有一个新的引用,所以它们不相等,就像:

var user1 = new User();
var user2 = new User();
user1 === user2; // Never true

【讨论】:

    【解决方案2】:

    考虑以下两种情况:

    [] == []; // returns false
    ["foo"] == ["foo"]; // returns false
    

    这里,创建了两个不同的对象,并且在不同内存位置创建的两个不同实例永远不会相同(对象实例比较比较内存地址)。结果false 在输出中。

    但是,

    ["foo"] == "foo"; // returns true
    

    在这里,["foo"] 对象类型被隐式转换为 primitive type。现在右侧的"foo"string,所以它会尝试在string (.toString(), since double equals allows coercion) 上转换它并比较"foo" == "foo",即true

    结论:我们通过内存指针/地址或者我们可以说引用来比较对象实例,通过实际值比较来比较原始类型。

    【讨论】:

      【解决方案3】:

      因为它们不是同一个对象,不同的对象永远不会相等,所以结果是false

      【讨论】:

        【解决方案4】:

        See Object identity 因为两个数组都创建了一个新的数组实例,所以比较两个不同的对象是不相等的。您的代码相当于:

        var arr1 = [],
            arr2 = [];
        arr1 == arr2; // false    
        

        两个字面量总是计算为两个不同的实例,它们不被认为是相等的。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-10
          • 2012-07-16
          • 2018-01-24
          • 2016-02-21
          • 2016-08-03
          • 2010-11-11
          • 2023-03-05
          相关资源
          最近更新 更多