【问题标题】:How can I tell if it is an object or an array?如何判断它是对象还是数组?
【发布时间】:2014-02-12 20:46:52
【问题描述】:

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

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

但问题是,我不知道obj 是数组还是对象,因为

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

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

【问题讨论】:

标签: javascript typeof


【解决方案1】:

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

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

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

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

【讨论】:

  • [object Array] 在每个浏览器中都一样吗?
  • 是的,这适用于任何兼容 ECMAScript 的浏览器,应该是所有浏览器。
【解决方案2】:

检查构造函数:

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

【讨论】:

  • {}.constructor --> SyntaxError: Unexpected token .
  • 我看到了图片,但在 chrome 中没有看到错误(图片看起来像 chrome)
  • 我正在使用 Chrome 20.0.1115.1 你认为这是 Chrome 的错误还是我做错了什么?
  • 我能得到的最新版本 (winXP) 是 18.0.1025.162 m,我没有收到任何错误。 chrome19 是 BETA 而 chrome20 是 dev,所以我并不关心它们,因为它们不必是稳定的。
  • 我其实是在使用开发通道,但我认为这不会影响 JavaScript?
【解决方案3】:

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

Array.isArray( maybeArray );

如果担心兼容性,您可以使用Underscore.jsjQuery

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

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

【讨论】:

    【解决方案4】:

    这很简单。尝试类似

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多