为什么在 JavaScript 中 [] !== []?

10

2
它比较的是是否为同一对象,而不是等价性。 - Ultimater
2
我一开始也是这么想的,但是 [] == [][] === [] 都返回 false。 - HTTP 501
1
因为列表实际上是对象,而对象只有在两个变量引用同一个对象时才相等。 - Nick stands with Ukraine
这是因为它们不是同一个对象。它只比较引用而不是内容。 - Johannes Merz
1
请参见您引用页面中的链接:http://dorey.github.io/JavaScript-Equality-Table/。 - Marc B
@Bergi 我现在知道在这种情况下 ===== 的行为是相同的,但当我搜索时我并不知道,很多人可能也是这样认为的。所以你提供的重复内容是关于 == 的,如果你还不知道答案,那就是另一回事了... - fahrradflucht
3个回答

9

这个操作是对两个数组字面量进行引用检查,以查看它们是否为同一实例。由于您有两个字面量,意味着您构造了两个独立的数组,因此引用检查将返回false。以下操作将返回true:

var a = []
var b = a

//b === a

这是因为我们有两个对同一数组的引用。

4

[] 每次使用时都会创建一个新的(且为空)数组。无论它们的内容如何,你正在比较两个数组,它们的指针(或引用)被进行了比较。

var array = [];
var anotherArray = array; // these two will point to the same array, so they are equal


array === anotherArray; // true
array === []; // false


array.push('something');
anotherArray.length; // 1

3

因为[]是一个对象,而对象之间的比较只有在比较的两个对象指向完全相同的对象时才会返回true。你已经创建了两个不同的对象,因此它们不相等。

var x = []
var y = x
var z = []

x == x // true
x == y // true
x == z // false

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接