gpt4 book ai didi

javascript - 如果 [0] == 0 和 0 == [[0]] 都为真,那么为什么 [0] == [[0]] 为假?

转载 作者:数据小太阳 更新时间:2023-10-29 05:07:43 25 4
gpt4 key购买 nike

我们都知道 javascript 在测试相等性时会进行古怪的转换,但到底发生了什么?

> [0] == 0
true
> 0 == [[0]]
true
> [0] == [[0]]
false

是的,我天真地期望 == 运算符具有传递性。

最佳答案

[0] == 00 == [[0]] 将原始值与对象进行比较,从而进行类型转换将被执行。在这两种情况下,[0][[0]] 最终都将转换为原始值 0

这是在 The Abstract Equality Comparison Algorithm 的步骤 8(和 9)中定义的:

  1. If Type(x) is either String or Number and Type(y) is Object,
    return the result of the comparison x == ToPrimitive(y).

但是,[0] === [[0]] 比较两个对象,两个不同的对象永远不会彼此相等:

1f. Return true if x and y refer to the same object. Otherwise, return false.


这是一个稍微简单的例子,它证明了松散比较是不可传递的:

" " == 0 // true
"\n" == 0 // true
" " == "\n" // false

前两个比较执行类型转换(字符串到数字),最后一个不执行并且两个字符串的值不同。

关于javascript - 如果 [0] == 0 和 0 == [[0]] 都为真,那么为什么 [0] == [[0]] 为假?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27703580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com