【问题标题】:Compare JavaScript Array [duplicate]比较 JavaScript 数组 [重复]
【发布时间】:2012-12-28 13:50:49
【问题描述】:

可能重复:
Why [] == [] is false in javascript?

我想问一些奇怪的事情,即:

var x = "pl";
var y = ["pl"];
[x] == y; // false - why?
x == y; // true - how ? 
x === y; // false - okay

谁能解释一下?

提前致谢。

【问题讨论】:

    标签: javascript arrays compare


    【解决方案1】:

    第一个是假的,因为您正在比较两个数组(它们是对象) - 除非对象实际上是 同一个对象 如果对象被强制转换为不同类型的值,如第二次比较。

    第二次比较,y被强制为字符串值,然后发现等于"pl"

    例如,这段代码:

    ["pl"] + "foo" → "plfoo"
    

    顺便说一句,这就是为什么您应该始终使用=== 而不是== - 它不会导致任何令人惊讶的强制转换。这就是为什么第三个比较是错误的。

    【讨论】:

    • 好的,然后解释一下:["hello", "john"] == "hello, john" // true
    • [x] == y 进行了浅比较,由于两者引用的不是同一个数组,所以返回false。
    • @cojack ['a', 'b', 'c'].toString()'a,b,c'
    【解决方案2】:

    Array to Array(抽象相等比较)

    [x] == y; // false - why?
    

    [x]y 不引用同一个对象。 Arraysobjects== 运算符测试它们是 same 对象,而不仅仅是所有属性具有相同值的两个对象。为了以那种方式确定对象相等性,您必须手动枚举每个对象的属性并测试每个值。

    根据==使用的The Abstract Equality Comparison Algorithm

    如果 x 和 y 引用同一个对象,则返回 true。否则,返回 false。

    字符串到数组(抽象相等比较)

    x == y; // true - how ? oO
    

    y,一个数组,被强制转换为一个字符串,因为您在将它与一个字符串x 进行比较时使用了==

    根据==使用的The Abstract Equality Comparison Algorithm

    如果 Type(x) 是 String 或 Number 并且 Type(y) 是 Object,则返回 比较的结果 x == ToPrimitive(y)。

    字符串到数组(严格相等比较)

    x === y; // fasle - okey
    

    ===== 不同,它不会y 强制转换为字符串...因此,您将字符串与对象进行比较。

    根据===使用的The Strict Equality Comparison Algorithm

    如果 Type(x) 与 Type(y) 不同,则返回 false。

    【讨论】:

      【解决方案3】:
      [x] == y; 
      

      ['pl'] == ['p1'] - 比较内存中 2 个不同数组的引用

      x == y; 
      

      与 "pl" == ["p1"].toString() 相同。 JS将第二个参数转换为字符串,因为第一个也是字符串

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-19
        • 2013-02-02
        • 2021-11-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多