如何区分对象和数组

时间:2020-05-10 23:42:44

标签: javascript node.js reactjs express mern

let a = {}
let b = []

typeof a // returns an object
typeof b // returns an object

 a === {} // false
 b === [] // false
 a === b // false

那我怎么知道它是数组还是对象, 我正在尝试验证用户输入,该用户输入可以是数组或对象,但无论哪种情况,我都不希望该值为空

3 个答案:

答案 0 :(得分:2)

这确实是将几个问题合而为一的问题。首先,对于许多人来说typeof []'object' 违反直觉的。这仅仅是因为数组是引用类型(nullDate实例,并且任何其他对象引用也具有typeof中的object)。

非常感谢,要知道对象是否为Array的实例,您现在可以使用便捷的Array.isArray(...)函数。另外,您可以将其用于任何类型的对象,可以执行类似b instanceof Array的操作。

通过检查Object.keys(a).length === 0可以知道其中之一是否为,尽管对于数组来说,更自然的做法是b.length === 0

使用===检查任何两个对象变量(包括数组)只会告诉您两个变量是否引用内存中的同一对象,而不是它们的内容是否相等。

答案 1 :(得分:0)

由于数组和对象共享相同的类型,因此您可以检查例如:

if (b instanceof Array) {

}

答案 2 :(得分:0)

if (Array.isArray(a) && a.length === 0) {
  // a is an array and an empty one
}