空数组在Javascript中不等于自己?

14 javascript

我所遇到的情况下 [] == []false在Javascript.

有人可以解释原因吗?

ota*_*tay 12

对象通过引用相等,[]是具有新引用的新对象,右手[]也是具有新引用的全新对象,因此它们不相等,如:

var user1 = new User();
var user2 = new User();
user1 === user2; // Never true
Run Code Online (Sandbox Code Playgroud)


xda*_*azz 5

因为它们不是同一个对象,不同的对象永远不会完全相同,所以结果是false


Rai*_*nod 5

考虑以下两种情况:

[] == []; // returns false
["foo"] == ["foo"]; // returns false
Run Code Online (Sandbox Code Playgroud)

在这里,创建了两个不同的对象,并且在不同内存位置创建的这两个不同实例永远不会相同(对象实例比较比较内存地址)。结果false输出。

但,

["foo"] == "foo"; // returns true
Run Code Online (Sandbox Code Playgroud)

在这里,["foo"]对象类型被隐式转换为primitive type. 现在"foo"右侧是string这样,它尝试将其转换为string( .toString(), since double equals allows coercion) 并进行比较"foo" == "foo",即true.

结论:我们通过内存指针/地址来比较对象实例,或者我们可以通过实值比较说引用和原始类型。