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

Why is [] !== [] in JavaScript?

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

我通读了 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness,但找不到任何解释这一点的内容。

编辑: 我不认为 this question or this question 与我的完全相同。它询问 == 运算符,它表现得很疯狂。答案是我的问题的答案,但不是同一个问题。

[] 每次写入时都会创建一个新的(空的)数组。您正在比较两个数组,无论它们的内容如何,​​都在比较它们的指针(或引用)。

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

这会对两个数组文字进行引用检查,看它们是否是同一个实例。你有两个文字的事实意味着你正在构造两个单独的数组,因此引用检查 returns false。这将 return 为真:

var a = []
var b = a

//b === a

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

因为[]是一个对象,对象的比较只有returns当比较的两边都指向完全相同的对象时才为真。您创建了两个单独的对象,因此它们不相等。

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

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