我想检查变量是否为数组?
这是用于获得更好性能的最佳方法。
isArray
或
instanceof
答案 0 :(得分:3)
大家伙(Jquery,下划线)这样做:
isArray = Array.isArray || function(obj) {
return Object.prototype.toString.call(obj) == '[object Array]';
};
但这些不是你正在寻找的机器人你实际上根本不需要它。不要“检查”你的变量 - 只要知道它们。
答案 1 :(得分:2)
使用Array.IsArray会更好。
同时检查此instanceof
considered harmful (or how to write a robust isArray
)
在多帧DOM中编写脚本时会出现问题 环境。简而言之,在一个iframe中创建的Array对象 不要与另一个中创建的数组共享[[Prototype]] iframe中。他们的构造函数是不同的对象,所以两者 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 ops / sec
现在使用instanceof: -
(a instanceof Array && (s instanceof Array || f instanceof Array));
它几乎 21,594,618 ops / sec
即, instanceOf比使用IsArray慢15%。