javascript是判斷對象是不是數組

JS中的數據類型:javascript

2大類
 原始類型:值保存在變量本地的數據類型
  5種:Number String Boolean undefined null
  Number:8bytes 舍入偏差-->四捨五入
  String:每一個英文字符 1byte
      每一個漢字字符 2bytes
      一旦建立內容不可改變
  Boolean: true false
引用類型:值不保存在變量本地的數據類型java

  js中的變量 vs 數據庫
   內存中    硬盤上的文件
   臨時的    持久的
   客戶端    服務器端只存一份數據庫

通常用typeof判斷數據類型:以下>注意最後一個segmentfault

console.log(typeof("Hello")); //string
console.log(typeof(123)); //number
console.log(typeof({a:1})); //object
console.log(typeof(function f(){})); //function
console.log(typeof([])); //object

爲何不是array呢?該如何判斷一個對象是object仍是array類型呢?數組

  typeof能夠檢測基本類型包括 undefined, string, number, boolean,可是對於檢測對象就不靠譜了。瀏覽器

  不僅是Array,javascript中的對象,包括 Date, String, Boolean, Number, Object, Function, Array, RegExp, Error 使用typof只會返回 "object"。服務器

下面給出4中方法:app

//若是當前瀏覽器的Array構造函數對象中不包含isArray
    if(!Array.isArray){
    //    爲Array構造函數添加isArray方法
        Array.isArray=function(obj){
            //判斷obj是否是數組類型4種
            //1. 若是Array.prototype在obj的原型鏈中
              //return Array.prototype.isPrototypeOf(obj);
            //2. 用instanceof: 語法:obj instanceof 構造函數名
            //return obj instanceof Array;
            //實例:一個構造函數建立出的每一個具體對象
            //3. 原型對象的constructor屬性
            //return obj.constructor==Array;
            //4. 利用Object原型的toString方法
            /*call,apply
                call,在調用方法的一瞬間更換調用方法的對象*/
            return Object.prototype.toString.apply(obj)=="[object Array]";
        }
    //  
    }

注意:(來自https://segmentfault.com/q/1010000000130605)函數

使用 instanceof 或者 constructor 來檢測 Array 也不是靠譜的辦法。spa

若是是待檢測的數組來自一個iframe的數組時,instanceof和contructor都會失效。

因爲每一個iframe都有一套本身的執行環境,跨frame實例化的對象彼此是不共享原型鏈的。

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]    
  arr instanceof Array; // false    
  arr.constructor === Array; // false
相關文章
相關標籤/搜索