js陣列判斷(型別判斷)
阿新 • • 發佈:2019-02-18
首先是最基本的判斷方法:通過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能力有限
-
原型判斷,Array.prototype.isPrototypeOf(obj)
利用isPrototypeOf()方法,判定Array是不是在obj的原型鏈中,如果是,則返回true,否則false。
-
建構函式,obj instanceof Array
使用 instanceof 就是判斷一個例項是否屬於某種型別 這個方法不是特別靠譜,不同的框架中建立的陣列不會相互共享其prototype屬性!!
-
根據物件的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);
}
-
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]'
其它判斷原理類似。