可能重复:
In javascript how can we identify whether an object is a Hash or an Array?
在javascript中
typeof([])
和
typeof({})
都返回“对象”。
如何在Javascript中可靠地区分数组和关联数组?
我想过测试有问题的对象,看看它是否具有“length”属性(表明它是一个数组),但是下面的内容也会被视为一个数组:
{length:5}
答案 0 :(得分:16)
现代浏览器内置了Array.isArray
。
对于旧版浏览器,您可以测试该功能并在必要时添加。
if( typeof Array.isArray !== 'function' ) {
Array.isArray = function( arr ) {
return Object.prototype.toString.call( arr ) === '[object Array]';
};
}
alert( Array.isArray( [] ) );
修改强>
Array.isArray
is part of ECMAScript 5:
15.4.3.2 Array.isArray(arg)
isArray函数接受一个参数arg,如果参数是类内部属性为“Array”的对象,则返回布尔值true;否则返回false。采取以下步骤:
- 如果Type(arg)不是Object,则返回false。
- 如果arg的[[Class]]内部属性的值是“Array”,则返回true。
- 返回false。
醇>
答案 1 :(得分:5)
一个好主意是检查内部[[CClass]]
值。为此,您需要调用Object.prototype.toString
:
var toStr = Object.prototype.toString;
toStr.call([]); // === [object Array]
toStr.call({}); // === [object Object]
答案 2 :(得分:0)
Javascript中不存在关联数组。
数组只能有数字键。如果访问字符串键,实际上使用的是快捷键,它与对象表示法完全等效。
http://www.quirksmode.org/js/associative.html
http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/