1. 程式人生 > >js陣列判斷(型別判斷)

js陣列判斷(型別判斷)

首先是最基本的判斷方法:通過typeof運算子

JavaScript裡面有五種基本型別和引用型別。用typeof只能區分並判斷出基本型別。

舉個例子

alert(typeof 1);                // 返回字串"number"   
alert(typeof "1");              // 返回字串"string"   
alert(typeof true);             // 返回字串"boolean"   
alert(typeof {});               // 返回字串"object"   
alert(typeof []);               // 返回字串"object "   
alert(typeof function(){});     // 返回字串"function"   
alert(typeof null);             // 返回字串"object"   
alert(typeof undefined);        // 返回字串"undefined"  

物件是物件,陣列也是物件,js萬物皆物件,typeof能力有限

  1. 原型判斷,Array.prototype.isPrototypeOf(obj)

    利用isPrototypeOf()方法,判定Array是不是在obj的原型鏈中,如果是,則返回true,否則false。 

  2. 建構函式,obj instanceof Array

    使用 instanceof 就是判斷一個例項是否屬於某種型別  這個方法不是特別靠譜,不同的框架中建立的陣列不會相互共享其prototype屬性!!

  3. 根據物件的class屬性,跨原型鏈呼叫toString()方法

    呼叫物件原型中的toString方法, Object.prototype.toString.call(obj);因為很多物件繼承的toString()方法被重寫了。 

    function _getClass(o){

    if(o===null) return "Null";  
    if(o===undfined) return "undefined";  
    return Object.prototype.toString.call(o).slice(8,-1);  
    

    }

  4. Array.isArray()方法

    Array.isArray([1, 2, 3]); // true
    Array.isArray({foo: 123}); // false
    Array.isArray('foobar'); // false
    Array.isArray(undefined); // false

    不推薦,有些環境下可能不支援isArray()方法

綜合

推薦使用第三種方法  
判斷:
Object.prototype.toString.call(arg) === '[object Array]'  

其它判斷原理類似。