判断是否为数组的几种方法

494 阅读1分钟

数组是属于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