2

我想检查一个变量是不是数组?

这是用于获得更好性能的最佳方法。

isArray

或者

instanceof

4

2 回答 2

3

大家伙(Jquery,下划线)这样做:

  isArray = Array.isArray || function(obj) {
    return Object.prototype.toString.call(obj) == '[object Array]';
  };

这些不是你要找的机器人,你实际上根本不需要这个。不要“检查”你的变量——只知道它们。

于 2013-10-05T10:21:10.227 回答
2

Array.IsArray 会更好用。

还要检查这instanceof被认为是有害的(或如何编写健壮的isArray

当涉及到多帧 DOM 环境中的脚本时,就会出现问题。简而言之,在一个 iframe 中创建的 Array 对象不与在另一个 iframe 中创建的数组共享 [[Prototype]]。它们的构造函数是不同的对象,因此 instanceof 和构造函数检查都失败:

您还可以检查两者之间的速度变化,您会发现 isArray 相对更快。

这是一个检查链接:- Array.isArray vs instanceof Array

以下代码用于检查速度变化:

<script>
  Benchmark.prototype.setup = function() {
    var a = [1, 2, 3];
    var s = 'example';
    var f = false;
  };
</script>

使用 Array.IsArray:

(Array.isArray(a) && (Array.isArray(s) || Array.isArray(f)));

它执行了近25,255,693 次操作/秒

现在使用 instanceof:-

 (a instanceof Array && (s instanceof Array || f instanceof Array));

它执行了近21,594,618 次操作/秒

即,instanceOf 比使用 IsArray 慢 15%。

于 2013-10-05T10:15:02.443 回答