【问题标题】:best way to test if a variable is an array [duplicate]测试变量是否为数组的最佳方法[重复]
【发布时间】:2012-07-22 05:25:31
【问题描述】:

可能重复:
How to detect if a variable is an array

当我需要测试变量是否为数组(例如函数中的输入参数可能是对象或数组)时,我通常使用这段代码

typeof(myVar) === 'object' && myVar.length !== undefined;

考虑到即使myVar instanceof Array is faster 应该避免由于iframe 问题,这是正确的方法还是有更有效的方法?

【问题讨论】:

  • zepto.js(有很好的源代码)使用instanceof:function isArray(value) { return value instanceof Array }src
  • @bokonic :可能重复的答案清楚地表明,如果对象跨帧边界传递,这将失败,因为每个帧都有自己的 Array 对象。

标签: javascript


【解决方案1】:

你可以试试——Object.prototype.toString.call
一个例子-

var a = [1,2]
console.log(Object.prototype.toString.call(a))

这会返回 [object Array]
可以通过以下方式使用字符串切片方法进行检查

console.log(Object.prototype.toString.call(a).slice(8,-1)) <br />

返回“数组”

var a = [1,2]
console.log(Object.prototype.toString.call(a).slice(8,-1) == "Array") // true

【讨论】:

  • 或者为了减少开销,您可以与完整字符串进行比较:'[object Array]'(如下所示)
  • 好吧,我猜乔纳森已经回答了这个问题,我必须以更好的方式说:)
  • 是的,你是对的 Bokonic。我完全同意你的看法。
  • 另一种检查方法是通过 a.constructor == Array // 返回 true(仅当 a 为真数组且 a 不是类数组时)
【解决方案2】:

Array.isArray 现在可与ECMAScript 5 一起使用,因此您可以将它与polyfill 一起用于older browsers

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

Array.isArray(myVar);

【讨论】:

    【解决方案3】:

    如果您已经在代码中使用 jQuery,则可以使用 jQuery.isArray()。这是文档:

    http://api.jquery.com/jQuery.isArray/

    【讨论】:

      【解决方案4】:

      “iframe 问题”可以简单地通过不为框架和数组使用相同的名称来避免。在我看来,这并不难。也就是说,我从来不需要断言是否something 是一个数组...

      【讨论】:

      • “iframe 问题”是在 iframe 中创建的数组只是创建它的 iframe 的 Array 构造函数的实例,因此如果在帧之间传递它,则 instanceof “失败”。
      猜你喜欢
      • 2011-03-23
      • 2015-05-30
      • 2015-11-03
      • 1970-01-01
      • 2012-11-06
      • 2012-05-23
      • 2011-05-08
      • 2010-11-13
      • 2019-02-02
      相关资源
      最近更新 更多