【发布时间】:2014-04-21 09:29:54
【问题描述】:
我遇到过一种情况,在 Javascript 中 [] == [] 是 false。
有人可以解释为什么吗?
【问题讨论】:
-
这能回答你的问题吗? Why doesn't equality check work with arrays
标签: javascript
我遇到过一种情况,在 Javascript 中 [] == [] 是 false。
有人可以解释为什么吗?
【问题讨论】:
标签: javascript
对象通过引用相等,[] 是一个新对象有一个新的引用,右手[] 也是一个全新的对象有一个新的引用,所以它们不相等,就像:
var user1 = new User();
var user2 = new User();
user1 === user2; // Never true
【讨论】:
考虑以下两种情况:
[] == []; // returns false
["foo"] == ["foo"]; // returns false
这里,创建了两个不同的对象,并且在不同内存位置创建的两个不同实例永远不会相同(对象实例比较比较内存地址)。结果false 在输出中。
但是,
["foo"] == "foo"; // returns true
在这里,["foo"] 对象类型被隐式转换为 primitive type。现在右侧的"foo" 是string,所以它会尝试在string (.toString(), since double equals allows coercion) 上转换它并比较"foo" == "foo",即true。
结论:我们通过内存指针/地址或者我们可以说引用来比较对象实例,通过实际值比较来比较原始类型。
【讨论】:
因为它们不是同一个对象,不同的对象永远不会相等,所以结果是false。
【讨论】:
See Object identity 因为两个数组都创建了一个新的数组实例,所以比较两个不同的对象是不相等的。您的代码相当于:
var arr1 = [],
arr2 = [];
arr1 == arr2; // false
两个字面量总是计算为两个不同的实例,它们不被认为是相等的。
【讨论】: