使用typeof()区分javascript中的数组和哈希

时间:2011-07-27 13:18:58

标签: javascript

  

可能重复:
  In javascript how can we identify whether an object is a Hash or an Array?

在javascript中

typeof([])

typeof({})

都返回“对象”。

如何在Javascript中可靠地区分数组和关联数组?

我想过测试有问题的对象,看看它是否具有“length”属性(表明它是一个数组),但是下面的内容也会被视为一个数组:

{length:5}

3 个答案:

答案 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。采取以下步骤:

     
      
  1. 如果Type(arg)不是Object,则返回false。
  2.   
  3. 如果arg的[[Class]]内部属性的值是“Array”,则返回true。
  4.   
  5. 返回false。
  6.   

答案 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/