Array.isArray()
IE9+,非常普遍的用法,比如{a: '1'},Array.isArray({a: '1'})
返回false
variable.constructor === Array
变量是由Array构造函数生成的数组,寻找变量的构造函数...
[1,2,3] instanceof Array
返回一个布尔值,顺便提一下,instanceof这个方法判断基本数据类型是会失效的,比如 1 instanceof Number
为假,'2' instanceof String
为假,但是如果这样处理:
const a = new Number(2);
a instanceof Number // true
复制代码
随便找一个数组仅有的方法
可能有人有疑问,2..sort
或者'2'.sort
会不会报错,其实是不会的,但是ture.sort
会不起反应,所以最优的做法是:
typeof variable === 'object' && variable.sort === Array.prototype.sort
复制代码
Object.prototype.toString.call(variable) === '[object Array]'
基本全支持,这个是惯常的用法,非常准确
Object.getPrototypeOf(variable) === Array.prototype
IE9+,这也是个方法,但是需要注意,在 ES5 中,如果参数不是一个对象类型,将抛出一个TypeError异常。在 ES2015 中,参数会被强制转换为一个 Object:
Object.getPrototypeOf('foo');
// TypeError: "foo" is not an object (ES5 code)
Object.getPrototypeOf('foo');
// String.prototype (ES2015 code)
复制代码
Array.prototype.isPrototypeOf(variable)
这样真的可以,而且基本全支持,Object.isPrototypeOf() 方法用于测试一个对象是否存在于另一个对象的原型链上。