|
|
|
|
|
本文將通過具體實(shí)例,介紹JS檢查變量是否數(shù)組的2種常用方法。
1、使用Object.prototype.toString.call()
Object.prototype.toString.call()
是一種判斷 javascript 對象類型的標(biāo)準(zhǔn)化方法,因?yàn)槲覀冎?nbsp;Object.prototype.toString
、Number.prototype.toString
、Function.prototype.toString
、String.prototype.toString
和 Array.prototype.toString
都是不同的東西,因此使用Object.prototype.toString.call(obj)
方式可以很好的區(qū)分各種類型:
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]
知道了這個(gè),我們就能使用Object.prototype.toString.call()
檢查變量是否數(shù)組,我們看看下面的實(shí)例。
//判斷: [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]');
我們看看下面幾個(gè)例子:
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 (中國標(biāo)準(zhǔn)時(shí)間)
console.log(function(){}.toString());
//輸出:function (){}
console.log(null.toString());
//輸出:error
console.log(undefined.toString());
//輸出:error
同樣是檢測對象obj
調(diào)用toString
方法,obj.toString()
的結(jié)果和Object.prototype.toString.call(obj)
的結(jié)果不一樣,這是為什么?
這是因?yàn)?code>toString為Object
的原型方法,而Array
,function
等類型作為Object
的實(shí)例,都重寫了toString
方法。不同的對象類型調(diào)用toString
方法時(shí),根據(jù)原型鏈的知識,調(diào)用的是對應(yīng)的重寫之后的toString
方法(function
類型返回內(nèi)容為函數(shù)體的字符串,Array
類型返回元素組成的字符串.....),而不會去調(diào)用Object
上原型toString
方法(返回對象的具體類型),所以采用obj.toString()
不能得到其對象類型,只能將obj
轉(zhuǎn)換為字符串類型;因此,在想要得到對象的具體類型時(shí),應(yīng)該調(diào)用Object
上原型toString
方法。
2、使用Array.isArray()
Array.isArray()
是JS檢查變量是否數(shù)組的另一種方法。我們看看如下實(shí)例:
//輸出: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)) ;
我們可以使用下面的另一個(gè)代碼示例快速檢查變量是否數(shù)組。
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()
方法來檢查數(shù)組,因?yàn)?typeof
無法將數(shù)組與其他對象區(qū)分開來,例如內(nèi)置對象 Date
和 RegExp
。
使用 Array.isArray()
也有助于確保我們的對象不為null
,因?yàn)橛捎陂L期存在的錯(cuò)誤,null
具有“對象”類型。
總結(jié)
本文介紹了JS檢查變量是否數(shù)組的2種常用方法,Object.prototype.toString.call()
和Array.isArray()
在使用時(shí),你可能需要注意瀏覽器是否支持的問題。