数组是属于Object类型的,也就是引用类型,所以不能使用typeof判断其具体类型
使用instanceof运算符:
instanceof运算符用于检验构造函数的prototype属性是否出现在对象的原型链中的任何位置,返回一个布尔值。例如:
let arr = []
arr instanceof Array //true
通过constructor属性判断:
实例的constructor属性指向构造函数,通过检查constructor属性也可以判断是否为一个数组。例如:
let arr = [1, 2, 3]
arr.constructor == Array //true
使用Array.isArray()方法:
Array.isArray()是ES5新增的方法,用来判断对象是否为数组。这个方法优于instanceof的地方在于它可以检测出iframes。例如:
let arr = []
Array.isArray(arr) //true
在ES6中,Array.isArray()被加入作为判断数组的新方法
使用Object.prototype.toString.call()方法:
这个方法多用于判断内置对象,即非自定义对象类型。例如:
Object.prototype.toString.call(a); // "[object Array]"
Object.getPrototypeOf() 方法返回指定对象的原型,然后和Array的原型对比
let arr = []
Object.getPrototypeOf(arr) == Array.prototype //true
Array原型链上的isPrototypeof
Array.prototype表示Array的构造函数的原型
isPrototypeof()方法可以判断一个对象是否存在另一个对象的原型链上
let arr = []
Array.prototype.isPrototypeof(arr) //true
Object.prototype.toString.call() 把对象转为字符串和一个已知的对象进行对比
let arr = []
Object.prototype.toString.call(arr) == '[object Array]' //true