关于javascript:检查isarray的最佳方法是什么

which is the best method used for checking isarray

本问题已经有最佳答案,请猛点这里访问。

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

为了获得更好的性能,使用哪种方法是最好的。

isArray

instanceof


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

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

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


array.isarray更适合使用。

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

The problems arise when it comes to scripting in multi-frame DOM
environments. In a nutshell, Array objects created within one iframe
do not share [[Prototype]]’s with arrays created within another
iframe. Their constructors are different objects and so both
instanceof and constructor checks fail:

另外,你可以检查两个之间的速度变化,你会发现Isarray相对更快。

下面是一个检查以下内容的链接:-array.is array vs instanceof array

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

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

使用array.isarray:

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

它的运行速度接近25255693次/秒。

现在使用instanceof:-

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

它的运行速度接近21594618次/秒

例如,instanceof比使用isarray慢15%。