`[1] == [1]`返回" false"并且`[1] == 1`返回" true"?

时间:2015-07-04 03:50:40

标签: javascript

我在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

1 个答案:

答案 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评估为真。