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是很難的。