1. 程式人生 > >檢測陣列的4種方法

檢測陣列的4種方法

檢測資料型別的方法請看本人的另一篇部落格

https://blog.csdn.net/xuehangongzi/article/details/82907915 下面主要介紹檢測陣列的(其中有三個方法和檢測資料型別相同) 1、instanceof instanceof 方法主要是檢測變數的原型鏈是否指向Array建構函式的prototype原型上。

var arr = [4,67,23];
arr instanceof Array  //return true

補充:但是instanceof不一定能保證檢測的結果一定正確,因為只要是在原型鏈上的都會返回true ,arr instanceof Object 也返回true 2、constructor

    var arr = [];
    arr.constructor === Array  ruturn true 
但是constructor可以被重寫,所以不能確保一定是陣列
    var str = 'abc';
    str.constructor = Array;
    str.constructor === Array // return true
而很明顯str不是陣列

3、Array.isArray() ES5 在Array上新增了檢測陣列的方法,因為是新的方法,瀏覽器有一定的相容問題

4、Object.prototype.toString.call() 終極方法,可以確保方法能檢測一定是陣列

    var arr = [34,65,1];
    Object.prototype.toString.call(arr) === '[object Array]' //return true

總結: 由於Array.isArray()是封裝在瀏覽器中,執行效率比較高,所以當真正需要檢測一個變數型別時,先會檢測瀏覽器是否支援Array.isArray(), 之後在用Obejct.prototype.toString()方法: 所以周全的封裝的程式碼如下:


var arr = [1,3]; 
function isArray(value){  
    if (typeof Array.isArray === "function") {  
        return Array.isArray(value);      
    }else{  
        return Object.prototype.toString.call(value) === "[object Array]";      
    }  
}  
alert(isArrayFn(arr));// true