NodeJS 如何区分对象和数组

holgip5t  于 2022-12-18  发布在  Node.js
关注(0)|答案(4)|浏览(299)
let a = {}
let b = []

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

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

那么我怎么知道它是数组还是对象呢?我尝试验证用户输入,其中它可以是数组或对象,但在这两种情况下,我都不希望值为空

soat7uwm

soat7uwm1#

这真的是几个问题合二为一。首先,对于许多人来说,typeof []'object'是违反直觉的。这仅仅是因为Array是一个引用类型(nullDate示例,以及任何其他对象引用也有objecttypeof)。
值得庆幸的是,要知道一个对象是否是Array的示例,现在可以使用方便的Array.isArray(...)函数,或者,可以对任何类型的对象使用该函数,可以执行类似b instanceof Array的操作。
要知道其中一个是否为 empty,可以通过检查Object.keys(a).length === 0来完成,尽管对于Arrays,检查b.length === 0更自然。
===检查任意两个对象变量(包括Arrays),只会告诉你这两个变量是否引用了内存中的同一个对象,而不会告诉你它们的 * 内容 * 是否相等。

zd287kbt

zd287kbt2#

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

if (b instanceof Array) {

}
ryevplcw

ryevplcw3#

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

afdcj2ne4#

实际上,Object和Arrays都使用typeof会返回Object,JS中有一些方法可以检查变量是否为数组。
1.* 数组.isArray(变量名)*
1.* 数组的变量名示例 *
1.* 变量名.构造函数===数组 *
如果变量是数组,则所有这些方法将返回true,否则将返回false

相关问题