Douglas Crockford 推荐用鸭子类型 也就是不关注对象是什么。而是关注对象能做什么事情。
//鸭式辨型 Function isArray(value){ return typeof value.sort() === 'function'; }
这种检测依赖一个事实,即数组数据哦唯一包含sort()方法的对象。问题是如果传入的value是一个包含sort()的对象那么就有问题了。
所以Juriy Zaytsev给出了一种优雅的解决方案
function isArray(value){ return Object.prototype.toString.call(value) === '[object Array]'; }
我的理解是Object上的toString会返回该对象的字符串。但是不能用于自定义对象。
在ES5中引入了一个新方法 即Array.isArray();
那么最终的代码是
function isArray(value){ if(typeof Array.isArray() === 'function ' ){ return Array.isArray(value); }else{ return Object.prototype.toString.call(value) === '[object Array]'; } }
END