有时我发现我需要验证变量是否具有数组或对象作为其结构,以便它可以根据存储在变量中的值的类型采取相应的操作。
推荐什么来区分数组和对象?
说到一个不是实例化函数产物的对象。
if (isObject(valor)) {
/* Código */
} else {
/* Código */
}
有时我发现我需要验证变量是否具有数组或对象作为其结构,以便它可以根据存储在变量中的值的类型采取相应的操作。
推荐什么来区分数组和对象?
说到一个不是实例化函数产物的对象。
if (isObject(valor)) {
/* Código */
} else {
/* Código */
}
在 JavaScript (ECMAScript 5) 中不仅有对象和数组,一共有 5 种基本类型:
string, number, undefined, boolean, object
通常的方法是使用
typeof
将返回相应字符串的运算符,即:如何?是的,数组是常规对象( where ),但它们在(符号:)和 property
typeof [] === "object"
之间有关系。他们也继承自.key
valor[key]
length
Array.prototype
检查对象是否为数组的一种好方法(所有当前浏览器都支持)是:
Array.isArray(valor)
所以你不能只区分数组和对象,因为它有可能既不是一件事也不是另一件事。
您可以执行以下操作:
但要小心!, 有一个例外,
typeof null === 'object'
所以你还应该检查值是否为空,因为具有值的变量null
会误报为对象。这是 ECMAScript 5 中的一个错误,版本 6 修复了它并返回“null”。我想澄清一下,该变量可能包含一个函数,在这种情况下它将是
typeof function(){} === 'function'
有关MDN的更多信息,不幸的是它是英文的。
您可以使用
Object.prototype.toString.call(valor)
来了解对象类型valor
一个简单的方法是将函数
JSON.stringify()
应用于变量并检查结果字符串的第一个字符是什么:[
),则变量是一个数组。{
),则该变量是一个对象。考虑到这一点,我创建了一个简单的函数,如果参数是数组,则返回字符串“array”,如果参数是对象,则返回“object”,如果是另一种类型的变量,则返回“other”:
以下是一系列示例:
验证对象是否为 JSON 或 Array 类型的最佳方法,我推荐以下方法,同时考虑到:
解决方案 1
解决方案 2
但严格来说,数组是 JSON 语法的一部分。也就是说,以下两个示例是该结构的有效部分。
示例 1:
示例 2:
如果有一个文本(字符串)类型的变量,您想验证其结构以了解它是否与上述两种类型中的任何一种一致,建议使用以下函数:
你可以用来检测 json a
您可以在此处查看有关 typeof 的更多信息
前段时间我遇到了类似的问题,我找到了以下解决方案,根据你的类型分配你,
type
在这个例子中它是一个对象。array
object
json
我希望这个对你有用。
简短的回答
如果您的目标是现代浏览器,请使用
Array.isArray(variable)
ECMAScript 5 中介绍的浏览器。所有详细信息都在Array.isArray()中。解释
根据ECMAScript 7,数组,也称为数组,是一种特殊对象,它对数组/数组索引属性键进行特殊处理。
换句话说,数组共享是一个具有某些特性的对象,这使得很难区分数组和不是数组的对象。幸运的是
Array.isArray()
,它是作为标准功能引入的,并且受到现代浏览器的支持。示范
但是,如果您使用更通用的解决方案,其中标识了数据类型,请考虑使用
toString.call()
它,因为这将返回 [object class ] 形式的字符串,其中class表示数据类型。注意:不要假设因为对象是为基元指示的,所以 JavaScript 中的一切都是对象,因为这是不正确的。发生的情况是 JavaScript 临时将原语转换为对象,以便能够调用相应对象的属性,在这种情况下是函数
toString