我想检查一个变量是不是数组?
这是用于获得更好性能的最佳方法。
isArray
或者
instanceof
大家伙(Jquery,下划线)这样做:
isArray = Array.isArray || function(obj) {
return Object.prototype.toString.call(obj) == '[object Array]';
};
但这些不是你要找的机器人,你实际上根本不需要这个。不要“检查”你的变量——只知道它们。
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%。