【问题标题】:Javascript array equal to zero but not itselfJavascript数组等于零但不是自身
【发布时间】:2016-12-28 11:11:47
【问题描述】:

我一直在玩 JavaScript 中的数组,但不知道为什么会发生这种情况:

console.log(0 == 0)
//true

console.log([] == 0)
//true

console.log(0 == [])
//true

console.log([] == [])
//false

console.log([] == ![])
// true

空数组左右都等于0,为什么不等于自己呢?

我意识到比较两个对象不会导致true,但是如果您将它们与0 进行比较,为什么它们会被强制为0(或虚假,不应该是这种情况),同时被威胁为如果将它们与另一个数组进行比较,则对象?

【问题讨论】:

标签: javascript arrays


【解决方案1】:
console.log(0 == [])
//true 

您正在尝试将对象与整数进行比较,因此您的对象被隐式类型转换为等效的整数值,即 0

console.log([] == [])
//false 

因为两个对象永远不相等

【讨论】:

    【解决方案2】:
    console.log([] == [])
    

    那会比较array1和array2是否是内存中的同一个数组对象,这不是你想要的。

    为了做你想做的事,你需要检查两个数组是否具有相同的长度,以及每个索引中的每个成员是否相同。

    console.log([].length == [].length)
    // true
    

    【讨论】:

    • 这是有道理的,但[] 肯定与0 不是同一个内存对象。
    • @Randy 因为 console.log([] == 0) 它检查对象是否存在,并返回真/假。一个
    【解决方案3】:

    由于从未给出完整的答案,而我现在已经真正理解了,所以我将自己提供答案。

    我在 Ecma-262 pdf 中找到了这个:

    它基本上读作[] == 0Number([]) == 0 相同,这与0 == 0 相同,这是真的。这不适用于严格的===

    除了第一条规则(x is the same as y)之外,没有其他规则可以比较对象。这意味着一切都一样,内存地址也是如此。由于它们不共享相同的内存地址,因此适用规则 10(返回 false)。

    比较x == y,其中xy 是值,产生true 或 错误的。这样的比较是这样进行的:

    1. 如果Type(x)Type(y)相同,那么

      一个。返回执行严格等式比较的结果x === y

    2. 如果xnull 并且yundefined,则返回true。

    3. 如果 x 是 undefined 并且 ynull,则返回 true。
    4. 如果Type(x)NumberType(y)String,则返回比较结果x == ToNumber(y)
    5. 如果Type(x)StringType(y)Number,则返回比较结果ToNumber(x) == y
    6. 如果Type(x)Boolean,则返回比较结果ToNumber(x) == y
    7. 如果Type(y)Boolean,则返回比较结果x == ToNumber(y)
    8. 如果Type(x)StringNumberSymbolType(y)Object,则返回比较结果x == ToPrimitive(y)
    9. 如果Type(x)Object 并且Type(y)StringNumberSymbol,则返回比较结果ToPrimitive(x) == y
    10. 返回假

    【讨论】:

      【解决方案4】:

      这个问题用对象引用和类型转换的知识处理比较好。首先,在javascript中,对象值是通过引用存储的。所以我们可以看出它与[]和[]不同,因为两个数组对应在内存中有两个不同的addr。其次,'=='对左右都是不严格的操作,[]和0都转换为false

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-24
        • 2012-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-27
        • 2011-11-10
        相关资源
        最近更新 更多