【问题标题】:How do I determine if something is an Array or Object?如何确定某个东西是数组还是对象?
【发布时间】:2013-04-16 04:15:15
【问题描述】:

数组和对象是唯一的输入。有没有简单的函数可以判断一个变量是数组还是对象?

【问题讨论】:

标签: javascript arrays object


【解决方案1】:

我怀疑还有许多其他类似的答案,但这是一种方法:

if ({}.toString.call(obj) == '[object Object]') {
  // is an object
}

if ({}.toString.call(obj) == '[object Array]') {
  // is an array
}

这可以变成一个漂亮的功能:

function typeOf(obj) {
  return {}.toString.call(obj).match(/\w+/g)[1].toLowerCase();
}

if (typeOf(obj) == 'array') ...

这适用于任何类型:

if (typeOf(obj) == 'date') // is a date
if (typeOf(obj) == 'number') // is a number
...

【讨论】:

  • +1,但您应该使用Object.prototype.toString,因为全局/窗口对象的toString 方法可能不会产生适当的结果。 :-)
  • 我想这取决于您需要多少浏览器支持。这应该适用于现代浏览器AFAIK。它默认为window.toString,它是一个对象。否则我更喜欢{}.toString。但你是对的。
  • 在 Firefox 中,window.toString.call(obj) 返回[xpconnect wrapped native prototype]。请注意,window 是一个宿主对象,因此不必遵守本机对象的规则。此外,global object 不是 Object 的实例(它也没有 ECMA-262 定义的[[Prototype]] 属性),它是一个先于其他对象存在的特殊对象。
  • 刚刚更新为使用适用于所有现代浏览器的正确(较短)方式。 AFAIK 仅 IE7- 有可以通过({}).toString 轻松解决的问题。我一直在使用window.toString,在我需要定位的浏览器中没有问题,但我发现了问题。
  • 我想最后一个警告是,这可能不适用于主机对象,甚至可能引发错误,但在 OP 的情况下应该没问题。
【解决方案2】:

(variable instanceof Array) 将为数组返回 true。

您也可以使用variable.isArray(),但旧版浏览器不支持。

【讨论】:

    【解决方案3】:

    你可以使用Array.isArray():

    if(Array.isArray(myVar)) {
        // myVar is an array
    } else {
        // myVar is not an array
    }
    

    只要你知道它会是一个或另一个,你就已经设置好了。否则,将其与typeof 结合使用:

    if(typeof myVar === "object") {
        if(Array.isArray(myVar)) {
            // myVar is an array
        } else {
            // myVar is a non-array object
        }
    }
    

    【讨论】:

      【解决方案4】:

      先判断是否为 instanceof数组,再判断是否为对象类型。

      if(variable instanceof Array)
      {
      //this is an array. This needs to the first line to be checked 
      //as an array instanceof Object is also true
      
      }
      else if(variable instanceof Object)
      {
      //it is an object
      }
      

      【讨论】:

      • 如果对象通过框架传递则失败,因为它将从不同的 Array 和 Object 实例创建。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      相关资源
      最近更新 更多