使用typeof()区分javascript中的数组和哈希
可能重复:使用typeof()区分javascript中的数组和哈希,javascript,Javascript,可能重复: 在javascript中 typeof([]) 及 两者都返回“object” 如何在Javascript中可靠地区分数组和关联数组 我曾想过测试有问题的对象,看看它是否具有“length”属性(表示它将是一个数组),但接下来的内容也将被视为一个数组: {length:5} Javascript中不存在关联数组 数组只能有数字键。如果访问字符串键,实际上是在使用一个快捷方式,它与对象表示法完全相同 一个好主意是检查内部[[CClass]]值。为此,您需要调用Object.pr
在javascript中
typeof([])
及
两者都返回“object”
如何在Javascript中可靠地区分数组和关联数组
我曾想过测试有问题的对象,看看它是否具有“length”属性(表示它将是一个数组),但接下来的内容也将被视为一个数组:
{length:5}
Javascript中不存在关联数组 数组只能有数字键。如果访问字符串键,实际上是在使用一个快捷方式,它与对象表示法完全相同
一个好主意是检查内部
[[CClass]]
值。为此,您需要调用Object.prototype.toString
:
var toStr = Object.prototype.toString;
toStr.call([]); // === [object Array]
toStr.call({}); // === [object Object]
现代浏览器内置了
Array.isArray
对于较旧的浏览器,您可以测试该函数,并在必要时添加它
if( typeof Array.isArray !== 'function' ) {
Array.isArray = function( arr ) {
return Object.prototype.toString.call( arr ) === '[object Array]';
};
}
alert( Array.isArray( [] ) );
编辑: : 15.4.3.2 Array.isArray(arg) isArray函数接受一个参数arg,如果参数是类内部属性为“Array”的对象,则返回布尔值true;否则返回false。采取以下步骤:
呃,我想你已经把它倒过来了。普通JS对象是关联数组。javascript中不存在真正的数组。js中的数组是一个带有sugar的对象,使其看起来像一个真正的数组(最值得注意的是length属性,它只返回1+存储在对象中的最高数值字段)。
if( typeof Array.isArray !== 'function' ) {
Array.isArray = function( arr ) {
return Object.prototype.toString.call( arr ) === '[object Array]';
};
}
alert( Array.isArray( [] ) );