匹配空对象数组

时间:2019-03-29 14:34:39

标签: javascript arrays

我必须在JavaScript代码中满足以下条件:

var a = [{}];

if (a === [{}]) {
  console.log('True');
} else {
  console.log('False');
}

它总是打印False,为什么?

1 个答案:

答案 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');
}