我遇到过Javascript中[] == []
为false
的情况。
有人可以解释原因吗?
答案 0 :(得分:9)
对象通过引用相等,[]
是带有新引用的新对象,右手[]
也是带有新引用的全新对象,因此它们不相等,就像:
var user1 = new User();
var user2 = new User();
user1 === user2; // Never true
答案 1 :(得分:3)
请考虑以下两种情况:
[] == []; // returns false
["foo"] == ["foo"]; //returns false
这里创建了两个不同的对象,这两个不同的实例永远不会相同,导致输出错误。
但是,
["foo"] == "foo"; // returns true
这里,[“foo”]对象类型隐式转换为私有类型,现在即字符串(.toString(), since double equals allows coercion
)和比较"foo" == "foo"
,这是真的。
答案 2 :(得分:2)
因为它们不是同一个对象,所以不同的对象永远不会相等,所以结果是false
。
答案 3 :(得分:0)
See Object identity因为两个数组都创建了一个新的数组实例,所以比较两个不同的对象是不相等的。您的代码相当于:
var arr1 = [],
arr2 = [];
arr1 == arr2; // false
两个文字总是评估为两个不同的实例,这些实例不相同。
答案 4 :(得分:0)
我实际上找不到代码来测试一个对象是否是一个长度数组(例如空数组),所以如果有人想要它,我写得很快:
function isArrayOfLength(obj, length) {
var isArrayOfSpecifiedLength = false;
if(Array.isArray(obj)){
if(obj.length === length){
isArrayOfSpecifiedLength = true;
}
}
return isArrayOfSpecifiedLength;
}
对它的测试:
(function(){
var isValidArray = isArrayOfLength([], 0);
console.log(isValidArray); //true
})();
(function(){
var isValidArray = isArrayOfLength([1,2,3], 0);
console.log(isValidArray); //false
})();
(function(){
var isValidArray = isArrayOfLength([1,2,3], 3);
console.log(isValidArray); //true
})();
(function(){
var isValidArray = isArrayOfLength({notAnArray:true}, 0);
console.log(isValidArray); //false
})();