我如何判断它是一个对象还是一个数组

How can I tell if it is an object or an array?

本文关键字:数组 一个 一个对象 何判断 判断      更新时间:2023-09-26

我想知道放入函数中的变量的类型。所以,我用了typeof,就像这样:

randomFunctionName: function(obj){
    switch(typeof obj){
        case "object":
           //Something
        case "text":
            //Something else
    }
}

但问题是,我无法判断obj是数组还是对象,因为

typeof [] === "object"  //true
typeof {} === "object"  //true

那么,我怎样才能将它们分开呢?它们之间有什么区别吗?

数组

是一个对象。 您可以测试对象是否为数组,如下所示:

Object.prototype.toString.apply(value) === '[object Array]';

您可以将其包装成一个函数,如下所示:

function isArray(a)
{
    return Object.prototype.toString.apply(a) === '[object Array]';
}

检查构造函数:

[].constructor == Array  //true
{}.constructor == Object  //true

从 ECMAScript 5 开始,你可以使用本机方法:

Array.isArray( maybeArray );

如果兼容性问题,您可以使用 Underscore.js 或 jQuery:

_.isArray( maybeArray ); // will use the native method if available
$.isArray( maybeArray );

这种实用程序也存在于AngularJS中。

这很简单。尝试类似的东西

var to = {}.toString;
alert(to.call([])); //[object Array]
alert(to.call({})); //[object Object]