|
|
|
|
|
|
本文將通過具體實例,介紹JS檢查變量是否數組的2種常用方法。
1、使用Object.prototype.toString.call()
Object.prototype.toString.call() 是一種判斷 javascript 對象類型的標準化方法,因為我們知道 Object.prototype.toString、Number.prototype.toString、Function.prototype.toString、String.prototype.toString 和 Array.prototype.toString 都是不同的東西,因此使用Object.prototype.toString.call(obj)方式可以很好的區分各種類型:
console.log(Object.prototype.toString.call("jerry"));
//輸出:[object String]
console.log(Object.prototype.toString.call(12));
//輸出:[object Number]
console.log(Object.prototype.toString.call(true));
//輸出:[object Boolean]
console.log(Object.prototype.toString.call(undefined));
//輸出:[object Undefined]
console.log(Object.prototype.toString.call(null));
//輸出:[object Null]
console.log(Object.prototype.toString.call({name: "jerry"}));
//輸出:[object Object]
console.log(Object.prototype.toString.call(function(){}));
//輸出:[object Function]
console.log(Object.prototype.toString.call([]));
//輸出:[object Array]
console.log(Object.prototype.toString.call(new Date));
//輸出:[object Date]
console.log(Object.prototype.toString.call(/\d/));
//輸出:[object RegExp]
function Person(){};
console.log(Object.prototype.toString.call(new Person));
//輸出:[object Object]知道了這個,我們就能使用Object.prototype.toString.call()檢查變量是否數組,我們看看下面的實例。
//判斷: [object Array] 是否等于 [object Array]
//輸出: true
console.log(Object.prototype.toString.call([]) === '[object Array]');
//判斷: [object Array] 是否等于 [object Array]
//output: true
console.log(Object.prototype.toString.call(new Array()) === '[object Array]');
//判斷: [object Object] 是否不等于 [object Array]
// output: false
console.log(Object.prototype.toString.call({}) === '[object Array]');
//判斷: [object Number] 是否不等于 [object Array]
//output: false
console.log(Object.prototype.toString.call(123) === '[object Array]');
//判斷: [object Boolean] 是否不等于 [object Array]
//output: false
console.log(Object.prototype.toString.call(true) === '[object Array]');
//判斷: [object String] 是否不等于 [object Array]
//output: false
console.log(Object.prototype.toString.call('javascript') === '[object Array]');
//判斷: [object Null] 是否不等于 [object Array]
//output: false
console.log(Object.prototype.toString.call(null) === '[object Array]');
//判斷: [object Undefined] 是否不等于 [object Array]
//output: false
console.log(Object.prototype.toString.call(undefined) === '[object Array]');
//判斷: [object Number] 是否不等于 [object Array]
//output: false
console.log(Object.prototype.toString.call(NaN) === '[object Array]');
我們看看下面幾個例子:
console.log("jerry".toString());
//輸出:jerry
console.log((1).toString());
//輸出:1
console.log([1,2].toString());
//輸出:1,2
console.log(new Date().toString());
//輸出:Wed Dec 21 2016 20:35:48 GMT+0800 (中國標準時間)
console.log(function(){}.toString());
//輸出:function (){}
console.log(null.toString());
//輸出:error
console.log(undefined.toString());
//輸出:error同樣是檢測對象obj調用toString方法,obj.toString()的結果和Object.prototype.toString.call(obj)的結果不一樣,這是為什么?
這是因為toString為Object的原型方法,而Array,function等類型作為Object的實例,都重寫了toString方法。不同的對象類型調用toString方法時,根據原型鏈的知識,調用的是對應的重寫之后的toString方法(function類型返回內容為函數體的字符串,Array類型返回元素組成的字符串.....),而不會去調用Object上原型toString方法(返回對象的具體類型),所以采用obj.toString()不能得到其對象類型,只能將obj轉換為字符串類型;因此,在想要得到對象的具體類型時,應該調用Object上原型toString方法。
2、使用Array.isArray()
Array.isArray()是JS檢查變量是否數組的另一種方法。我們看看如下實例:
//輸出:true
console.log(Array.isArray([]));
//輸出:true
console.log(Array.isArray(new Array()));
//輸出: false
console.log(Array.isArray({}));
//輸出: false
console.log(Array.isArray(123));
//輸出: false
console.log(Array.isArray(true)) ;
//輸出: false
console.log(Array.isArray('javascript'));
//輸出: false
console.log(Array.isArray(null));
//輸出: false
console.log(Array.isArray(undefined)) ;
//輸出: false
console.log(Array.isArray(NaN)) ;
我們可以使用下面的另一個代碼示例快速檢查變量是否數組。
function checkIfArray(array){
return (Array.isArray(array) === true && !array.length);
}
//輸出:true
console.log(Array.isArray([]));
//輸出:true
console.log(checkIfArray(new Array()));
//輸出: false
console.log(checkIfArray({}));
//輸出: false
console.log(checkIfArray(123));
//輸出: false
console.log(checkIfArray(true)) ;
//輸出: false
console.log(checkIfArray('javascript'));
//輸出: false
console.log(checkIfArray(null));
//輸出: false
console.log(checkIfArray(undefined)) ;
//輸出: false
console.log(checkIfArray(NaN)) ; 并不是所有瀏覽器都支持 Array isArray(),支持 Array isArray() 的瀏覽器有:
ECMAScript 5 (ES5) 引入了 Array.isArray() 方法來檢查數組,因為 typeof 無法將數組與其他對象區分開來,例如內置對象 Date 和 RegExp。
使用 Array.isArray() 也有助于確保我們的對象不為null,因為由于長期存在的錯誤,null 具有“對象”類型。
總結
本文介紹了JS檢查變量是否數組的2種常用方法,Object.prototype.toString.call()和Array.isArray()在使用時,你可能需要注意瀏覽器是否支持的問題。
