我必须在JavaScript代码中满足以下条件:
var a = [{}];
if (a === [{}]) {
console.log('True');
} else {
console.log('False');
}
它总是打印False
,为什么?
答案 0 :(得分:4)
如果要比较两个对象/数组,则它们在内存中的引用相同时只会返回true
。 []
将创建一个具有不同引用的新数组,因此它不能与其他数组相等。
console.log([] === []) //false
let a = [];
let b = a;
//Now 'a' and 'b' have same reference
console.log(a === b) //true
要解决此问题,您可以检查数组的长度及其第一个元素的length
中的Object.keys()
。
var a = [{}];
if (a.length === 1 && typeof a[0] === "object" && Object.keys(a[0]).length === 0) {
console.log('True');
} else {
console.log('False');
}
您也可以使用JSON.stringify()
var a = [{}];
if (JSON.stringify(a) === '[{}]') {
console.log('True');
} else {
console.log('False');
}