为什么 [] !== [] 在 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
为什么 [] !== []
在 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