• JavaScript中如何判断数组类型


    前言

    JavaScript中关于数组的判定问题,一直都是一个必须要掌握的点,那么,运用知识,如何判断一个类型是数组,就需要有对JavaScript使用有着深入的了解。

    判断方法

    一、Array.isArray

    ES5新增的数组方法,Array.isArray应该是我们最先想到的判定方式,现在应用的也比较广泛。

    const arr = [1,2,3,4]
    Array.isArray(arr)    // true
    

      

    如果是在支持ES5的浏览器中,用这样的方式自然没什么问题,但是如果是在IE9以下版本,这个方法并未受到支持,这时候我们就要用别的方式来判断数组。

    二、instanceof

    一般来说,instanceof关键字,是用来判断某个元素是否某对象构造函数实例。在数组判断上,instanceof关键字也可以进行数组的判定。

    const arr = [1, 2, 3, 4]
    arr instanceof Array   // true
    

      

    instanceof支持的浏览器版本比较多,所以一般来说,用instanceof判断,会比Array.isArray判定的范围要广泛。

    三、toString

    对象的toString方式也可以判定数组类型,一般来说这种方式的判定是各大库的一种Array.isArray的代替实现。

    例如,polyfill中,就是如此实现:

    if (!Array.isArray) {
      Array.isArray = function(arg) {
        return Object.prototype.toString.call(arg) === '[object Array]';
      };
    }
    
    const arr = [1, 2, 3, 4]
    Object.prototype.toString.call(arr) === '[Object Array]'   // true
    

      

    四、constructor

    除了以上的方式之外,我们还可以通过构造函数来判定:

    const arr = [1, 2, 3, 4]
    arr.constructor === Array  // true
    arr.__proto__.constructor === Array //true
    

      

    弊端

    instanceof和constructor的判定也存在一些弊端,他们判定的数组必须定义在同一个页面,否则将会判定为false。

    如果在iframe中的数组判定,就会出错。

    var iframe = document.createElement('iframe');
    document.body.appendChild(iframe);
    xArray = window.frames[window.frames.length-1].Array;
    var arr = new xArray(1,2,3); // [1,2,3]
    
    // Correctly checking for Array
    Array.isArray(arr);  // true
    // Considered harmful, because doesn't work through iframes
    arr instanceof Array; // false
    arr.constructor === Array; // false
    

      

    总结

    由上述几个方法判定,可以得出,其实polyfill的判定是最合理的,也最具有兼容性的一种判定。

    利用toString判定,胜出。

    我的博客:http://www.gaoyunjiao.fun/?p=165

  • 相关阅读:
    springboot-6-整合jdbc
    springboot-4-整合fastjson
    Python决策树可视化:GraphViz's executables not found的解决方法
    pandas的行列显示不全的解决方法
    3(1).特征选择---过滤法(特征相关性分析)
    3(2).特征选择---包装法
    seaborn矩阵图组合图---热力图heatmap、聚类图clustermap
    3(3).特征选择---嵌入法(特征重要性评估)
    datetime,Timestamp和datetime64之间转换
    Spring配置文件总结
  • 原文地址:https://www.cnblogs.com/qixingduanyan/p/11725557.html
Copyright © 2020-2023  润新知