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

myd*_*rms 12 javascript

可能重复:
在javascript中我们如何识别对象是Hash还是数组?

在javascript中

typeof([])
Run Code Online (Sandbox Code Playgroud)

typeof({})
Run Code Online (Sandbox Code Playgroud)

都返回"对象".

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

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

{length:5}
Run Code Online (Sandbox Code Playgroud)

use*_*716 16

现代浏览器已Array.isArray内置.

对于旧版浏览器,您可以测试该功能并在必要时添加.

if( typeof Array.isArray !== 'function' ) {
    Array.isArray = function( arr ) {
        return Object.prototype.toString.call( arr ) === '[object Array]';
    };
}

alert( Array.isArray( [] ) );
Run Code Online (Sandbox Code Playgroud)

编辑:

Array.isArray是ECMAScript 5的一部分:

15.4.3.2 Array.isArray(arg)

isArray函数接受一个参数arg,如果参数是类内部属性为"Array"的对象,则返回布尔值true; 否则返回false.采取以下步骤:

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


jAn*_*ndy 5

一个好主意是检查内部[[CClass]]价值。为此,您需要调用Object.prototype.toString

var toStr = Object.prototype.toString;

toStr.call([]);  // === [object Array]
toStr.call({});  // === [object Object]
Run Code Online (Sandbox Code Playgroud)