技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運(yùn)營

贊助商

分類目錄

贊助商

最新文章

搜索

【實(shí)例比較】JS檢查變量是否數(shù)組的2種方法

作者:admin    時(shí)間:2022-5-31 18:59:53    瀏覽:

本文將通過具體實(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.toStringFunction.prototype.toString、String.prototype.toStringArray.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]');    

 為什么不直接使用obj.toString()呢?

我們看看下面幾個(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() 的瀏覽器有:

  • Google Chrome 5.0
  • Microsoft Edge 12
  • Mozilla Firefox 4.0
  • Safari 5.0
  • Opera 10.5

為什么使用 Array.isArray() 方法來檢查數(shù)組?

ECMAScript 5 (ES5) 引入了 Array.isArray() 方法來檢查數(shù)組,因?yàn)?typeof 無法將數(shù)組與其他對象區(qū)分開來,例如內(nèi)置對象 DateRegExp。

使用 Array.isArray() 也有助于確保我們的對象不為null,因?yàn)橛捎陂L期存在的錯(cuò)誤,null 具有“對象”類型。

總結(jié)

本文介紹了JS檢查變量是否數(shù)組的2種常用方法,Object.prototype.toString.call()Array.isArray()在使用時(shí),你可能需要注意瀏覽器是否支持的問題。

相關(guān)文章

標(biāo)簽: 變量  數(shù)組  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */