我遇到了一个情况,在Javascript中[] == []
是false
。
有人可以解释一下为什么吗?
我遇到了一个情况,在Javascript中[] == []
是false
。
有人可以解释一下为什么吗?
对象是通过引用来比较的,[]
是一个新的对象,具有新的引用,右侧的 []
也是一个全新的对象,具有新的引用,因此它们不相等,就像:
var user1 = new User();
var user2 = new User();
user1 === user2; // Never true
[] == []; // returns false
["foo"] == ["foo"]; // returns false
这里创建了两个不同的对象,这两个在不同内存位置上创建的不同实例永远不会相同(对象实例比较比较内存地址)。输出结果为 false
。
但是,
["foo"] == "foo"; // returns true
["foo"]
对象类型会被隐式转换为原始类型
。目前右边的"foo"
是字符串(string)
,因此它试图将其转换为字符串(string)
(使用双等号进行强制类型转换),并比较"foo" == "foo"
,结果为true
。
结论:我们通过内存指针/地址或引用来比较对象实例,通过实际值比较来比较基本类型。false
。查看对象标识,因为两个数组都创建了一个新的数组实例,所以比较两个不同的对象是不相等的。你的代码等价于:
var arr1 = [],
arr2 = [];
arr1 == arr2; // false
两个字面量始终会评估为两个不相同的实例,它们不被视为相等。