9

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

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

编辑: 我不认为这个问题这个问题与我的完全相同。它询问==行为疯狂的操作员。答案是我的问题的答案,但不是同一个问题。

4

3 回答 3

9

这会对两个数组文字进行引用检查,以查看它们是否是同一个实例。您有两个文字的事实意味着您正在构建两个单独的数组,因此引用检查返回 false。这将返回 true:

var a = []
var b = a

//b === a

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

于 2016-10-28T21:14:33.687 回答
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
于 2016-10-28T21:13:44.967 回答
3

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

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

x == x // true
x == y // true
x == z // false
于 2016-10-28T21:16:04.040 回答