首页 > 解决方案 > 如何区分对象和数组

问题描述

let a = {}
let b = []

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

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

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

标签: javascriptnode.jsreactjsexpressmern

解决方案


这实际上是几个问题合二为一。首先,对于许多人来说,这违反直觉typeof []'object'。这仅仅是因为 Array 是一种引用类型(nullDate实例和任何其他对象引用也具有typeofof object)。

幸运的是,要知道一个对象是否是 的实例Array,您现在可以使用方便的Array.isArray(...)函数。或者,您可以将其用于任何类型的对象,您可以执行类似b instanceof Array.

可以通过检查来知道其中一个是否为Object.keys(a).length === 0,但对于数组来说,这样做更自然b.length === 0

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


推荐阅读