在Javascript中,空数组不等于自身?

28

我遇到了一个情况,在Javascript中[] == []false

有人可以解释一下为什么吗?


这个回答解决了你的问题吗?为什么数组不能使用相等检查? - Nico Haase
4个回答

21

对象是通过引用来比较的,[] 是一个新的对象,具有新的引用,右侧的 [] 也是一个全新的对象,具有新的引用,因此它们不相等,就像:

var user1 = new User();
var user2 = new User();
user1 === user2; // Never true

9
考虑以下两种情况:
[] == []; // returns false
["foo"] == ["foo"]; // returns false

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

但是,

["foo"] == "foo"; // returns true

这里,["foo"]对象类型会被隐式转换为原始类型。目前右边的"foo"字符串(string),因此它试图将其转换为字符串(string)(使用双等号进行强制类型转换),并比较"foo" == "foo",结果为true结论:我们通过内存指针/地址或引用来比较对象实例,通过实际值比较来比较基本类型。

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

0

查看对象标识,因为两个数组都创建了一个新的数组实例,所以比较两个不同的对象是不相等的。你的代码等价于:

var arr1 = [],
    arr2 = [];
arr1 == arr2; // false    

两个字面量始终会评估为两个不相同的实例,它们不被视为相等。


1
那么你如何进行比较? - assayag.org

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