美文网首页
判断一个对象是否为数组的几种方法

判断一个对象是否为数组的几种方法

作者: 陈学谦_ | 来源:发表于2017-04-22 10:35 被阅读248次

    故事背景

    // 无关紧要,可以跳过
    

    在面试新浪实习生的时候,被面试官问道如何判断一个数组是否真的为一个数组?当时我就答出了我最引以为豪的方法,Object.prototype.toString.call(arr),这个牛逼的方法可以判断任何引用类型的数据,但当我自信满满的看向面试官的时候,只见他一脸尴尬,这是我也尴尬了(难道我用的方法太高端了?不怕,我还有Plan B)。

    “当然还有另一个办法,就是用instanceof”

    看到面试官表情稍微放松了些顿时心想“稳了!”。

    “恩,不错,确实你说的第一个方法太高端了,我们一般都不用这么高端的方法”。

    尴尬。

    当面试官问我还有没有其他的方法时我思考了十秒(装的),回答说:“想不到了”。

    干,知识面还不够广啊。

    正题

    1. Array.isArray()

    var arr = [1, 2, 3];
    Array.isArray(arr); // true
    

    ES5新特性,需考虑兼容性:(参考MDN

    Feature Chrome Firefox (Gecko) IE Opera Safari
    Basic support 5 4.0 (2.0) 9 10.5 5

    若因为兼容性问题不能用,MDN提供了另一种方法,也就是下面要说的方法2。

    干,这个方法我当时居然没想到。

    2. Object.prototype.toString

    var arr = [1, 2, 3];
    Object.prototype.toString.call(arr); // [object Array]
    

    这个方法绝对是无敌的,绝逼能准确判断数组。

    如果经常要用的话,建议用下面的方法来写:

    if (!toString) {
      var toString = Object.prototype.toString;
    }
    
    toString.call(arr1);
    toString.call(arr2);
    ...
    

    3. instanceof

    var arr = [];
    arr instanceof Array; // true
    

    总结下,一共有这几种方法判断数组:
    1. Array.isArray()(最好在初始化时判断下是否支持)
    2. instanceof
    3. Object.prototype.toString

    相关文章

      网友评论

          本文标题:判断一个对象是否为数组的几种方法

          本文链接:https://www.haomeiwen.com/subject/zqqszttx.html