此问题在此处已有答案:
How can I check if an object is an array? [duplicate](51个回答)
typeof something return object instead of array(7个回答)
4个月前关闭。
为什么一个对象数组被认为是一个对象,而不是一个数组?例如:
$.ajax({
url: 'http://api.twitter.com/1/statuses/user_timeline.json',
data: { screen_name: 'mick__romney'},
dataType: 'jsonp',
success: function(data) {
console.dir(data); //Array[20]
alert(typeof data); //Object
}
});
字符串
Fiddle
3条答案
按热度按时间68de4m5k1#
JavaScript中一个奇怪的行为和规范是数组的类型是
Object
。你可以通过几种方式来检查变量是否是数组:
字符串
但最可靠的方法是:
型
既然你用jQuery标记了你的问题,你可以使用jQuery
isArray
函数:型
mv1qrgav2#
引用规范
15.4数组对象
数组对象给予特殊的处理某类属性名。属性名P(以String值的形式)是数组索引当且仅当ToString(ToUint 32(P))等于P,ToUint 32(P)不等于2^32- 1.属性名为数组索引的属性也称为元素。每个Array对象都有一个长度属性,其值总是非负的小于2^32的整数。长度属性的值在数值上大于名称为数组索引的每个属性的名称;每当创建或更改Array对象的属性时,其他属性会根据需要进行调整以保持此不变。具体而言,每当添加名称为数组索引的属性时,如果需要,则更改length属性,当数组索引的数值大于1时,当length属性被改变时,所有属性的名字是数组索引,并且其值不小于新的长度时,所有属性都将被自动删除。这个约束只适用于Array对象的自身属性,并且不受可能从其原型继承的length或数组索引属性的影响。
这里有一张
typeof
的表格x1c 0d1x的数据
为了增加一些背景知识,在JavaScript中有两种数据类型:
1.原始数据类型-包括null、undefined、string、boolean、number和object。
1.派生数据类型/特殊对象-包括函数、数组和正则表达式,是的,这些都是从JavaScript中的“Object”派生而来的。
JavaScript中的对象在结构上类似于大多数面向对象语言中的关联数组/字典-即,它具有一组键值对。
数组可以被认为是具有以下属性/键的对象:
1.长度-可以为0或以上(非负数)。
1.数组索引,这里的0、1、2等都是数组对象的属性。
希望这有助于更清楚地说明为什么typeof Array返回一个对象。干杯!
bis0qfac3#
试试这个例子,你就会明白JavaScript中的关联数组和对象之间的区别。
关联数组
字符串
返回
true
请记住,
a.length
将是未定义的,因为length
被视为键,您应该使用Object.keys(a).length
来获取关联数组的长度。对象
型
返回
false
JSON返回一个Object.可以返回一个Associative Array..但它不是这样的