zoukankan      html  css  js  c++  java
  • 【JavaScript】判断一个对象是否为数组的几种方法

    • typeof 对于Function、String、Number、Undefined等几种类型,完全可以胜任,但是当对象是Array时,
    var arr = [1,2,3,4];
    alert(typeof arr); //object
    
    • instanceof 返回一个Boolean值,指出对象是否是特定的一个实例,使用
    var arr = [1,2,3,4];
    alert(arr instanceof Object); //true这是由于Array是Object的子类
    alert(arr instanceof Array); //true
    
    • Array.isArray()
    // 下面的函数调用都返回 true
    Array.isArray([]);
    Array.isArray([1]);
    Array.isArray(new Array());
    
    // Array.prototype 也是一个数组。
    Array.isArray(Array.prototype);
    
    

    当检测Array实例时, Array.isArray 优于 instanceof,因为Array.isArray能检测iframes.

    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]
    
    Array.isArray(arr);  // true
    
    arr instanceof Array; // false
    
    
    • 原型链
    var arr = [1,2,3,4];
    console.log(arr.__proto__.constructor == Array);//true
    console.log(arr.constructor == Array);//true
    
    • Object.prototype.toString:首先,取得对象的一个内部属性[[Class]],然后依据这个属性,返回一个类似于"[object Array]"的字符串作为结果.利用这个方法,再配合call,我们可以取得任何对象的内部属性[[Class]],然后把类型检测转化为字符串比较,以达到我们的目的。
    var arr = [1,2,3,4];
    Object.prototype.toString.call(arr) == "[object Array]";//true
    toString.apply(arr) == "[object Array]";//true;
    
    //不能使用Array.isArray(),就采用以下方法
    if (!Array.isArray) {
      Array.isArray = function(arg) {
        return Object.prototype.toString.call(arg) === '[object Array]';
      };
    }
    
    • isArray() jquery已经封装了方法判断是否是数组
    var arr = [1,2,3];
    console.log($.isArray(arr));//true
    
  • 相关阅读:
    MVP社区巡讲照片集
    周末之个人杂想(十六)
    SQL Server 2014 BI新特性(二)结合Data Explorer和GeoFlow进行数据分析
    SQL Server 2014 BI新特性(一)五个关键点带你了解Excel下的Data Explorer
    Tabular Model下的ADOMD.NET
    玩玩Excel下的Power View
    LeakCanary,30分钟从入门到精通
    Android热修复技术总结
    阿里最新热修复Sophix与QQ超级补丁和Tinker的实现与总结
    热修复——深入浅出原理与实现
  • 原文地址:https://www.cnblogs.com/qiuyueding/p/9672742.html
Copyright © 2011-2022 走看看