let a = {}
let b = []
typeof a // returns an object
typeof b // returns an object
a === {} // false
b === [] // false
a === b // false
那我怎么知道它是数组还是对象, 我正在尝试验证用户输入,该用户输入可以是数组或对象,但无论哪种情况,我都不希望该值为空
答案 0 :(得分:2)
这确实是将几个问题合而为一的问题。首先,对于许多人来说typeof []
是'object'
是 违反直觉的。这仅仅是因为数组是引用类型(null
,Date
实例,并且任何其他对象引用也具有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
}