我在javascript
中发现了这种奇怪的行为。
var v1 = [1];
var v2 = [1];
v1 == v2 // false
v1 == 1 //true
[1] == [1] // false
1 == [1] // true
为什么[1] == [1]
返回false
而[1] == 1
返回true
?
答案 0 :(得分:6)
spec says如果==
的两个操作数彼此具有相同的类型(例如在[1] == [1]
情况下,它们都是类型Object
) ,然后==
的行为与===
完全相同。这两个数组不是完全相同的对象,因此返回false
。请注意:
var v1 = [1];
var v2 = v1;
v1 == v2; // true
当操作数具有不同类型时,它们都被强制执行。在1 == [1]
的情况下,来自上面链接的规则10首先应用,并且数组被toString()
转换为基元,返回'1'
。然后应用规则6(将字符串'1'
转换为数字1
),比较变为1 == 1
,最后它们具有相同的类型并与===
进行比较。显然1 === 1
评估为真。