jquery 为什么typeof数组与对象返回“object”而不是“array”?

gkl3eglg  于 2024-01-07  发布在  jQuery
关注(0)|答案(3)|浏览(221)

此问题在此处已有答案

How can I check if an object is an array? [duplicate](51个回答)
typeof something return object instead of array(7个回答)
4个月前关闭。
为什么一个对象数组被认为是一个对象,而不是一个数组?例如:

  1. $.ajax({
  2. url: 'http://api.twitter.com/1/statuses/user_timeline.json',
  3. data: { screen_name: 'mick__romney'},
  4. dataType: 'jsonp',
  5. success: function(data) {
  6. console.dir(data); //Array[20]
  7. alert(typeof data); //Object
  8. }
  9. });​

字符串
Fiddle

68de4m5k

68de4m5k1#

JavaScript中一个奇怪的行为和规范是数组的类型是Object
你可以通过几种方式来检查变量是否是数组:

  1. var isArr = data instanceof Array;
  2. var isArr = Array.isArray(data);

字符串
但最可靠的方法是:

  1. isArr = Object.prototype.toString.call(data) == '[object Array]';


既然你用jQuery标记了你的问题,你可以使用jQuery isArray函数:

  1. var isArr = $.isArray(data);

展开查看全部
mv1qrgav

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返回一个对象。干杯!

展开查看全部
bis0qfac

bis0qfac3#

试试这个例子,你就会明白JavaScript中的关联数组和对象之间的区别。

关联数组

  1. var a = new Array(1,2,3);
  2. a['key'] = 'experiment';
  3. Array.isArray(a);

字符串
返回true
请记住,a.length将是未定义的,因为length被视为键,您应该使用Object.keys(a).length来获取关联数组的长度。

对象

  1. var a = {1:1, 2:2, 3:3,'key':'experiment'};
  2. Array.isArray(a)


返回false
JSON返回一个Object.可以返回一个Associative Array..但它不是这样的

展开查看全部

相关问题