js 判断数组的四种方法
- 通过instanceof运算符用于检验构造函数的prototype 属性是否出现在对象的原型链中的任何位置,返回一个布尔值
let arr = [];
let a = arr instanceof Array;
console.log(a); //true
let obj = {};
let b = obj instanceof Array;
console.log(b); //false
- 通过 constructor 判断
实例的构造函数属性 constructor 指向构造函数,通过 constructor 属性可以判断是否为一个数组
let arr =[1,2,3]
arr.constructor === Array; //true
- 通过 Object.prototype.toString.call() 进行判断
Object.prototype.toString.call() 可以获取到对象的不同类型
let arr = [1,2,3]
Object.prototype.toString.call(arr) === '[object Array]';
- 通过 Array.isArray() 判断
Array.isArray() 用于确定传递的值是否是一个数组,返回值是布尔值
let arr = [1,2,3]
Array.isArray(a); //true
有个问题是Array.isArray()是ES5新增的方法,目的就是提供一个稳定可用的数组判断方法,对于ES5之前不支持此方法的问题,我们其实可以做好兼容进行自行封装,如下:
if(!Array.isArray){ Array.isArray = function(argument) { return Object.protutype.toString.call(argument) === '[object Array]' } }