ES6中添加了Array.isArray方法用来判断一个参数是不是数组。
这个方法如果要我自己来实现,就会是这样:
function isArray(arr) {
var toString = Object.prototype.toString;
var sign = "[object Array]";
return toString.call(arr) === sign;
};
事实上,MDN上面的polyfill就是这样写的。
这段代码很稳妥,在ES5及以前的版本中,几乎没问题。
然而,如果是在支持ES6的环境中,有一种trick可以骗过它的检测。
var obj = {};
// ES6 Symbol
obj[Symbol.toStringTag] = 'Array';
// true
console.log(isArray(obj));
我感觉要实现一个Nice的Array.isArray是很难的。