es6如何判斷變量是不是數(shù)組

小編給大家分享一下es6如何判斷變量是不是數(shù)組,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名雅安服務(wù)器托管、營銷軟件、網(wǎng)站建設(shè)、昌邑網(wǎng)站維護(hù)、網(wǎng)站推廣。

在es6中,可以利用Array的isArray()方法來判斷變量是不是數(shù)組,該方法用于判斷一個(gè)對(duì)象是否為數(shù)組類型,語法“Array.isArray(obj)”;如果對(duì)象是數(shù)組返回true,否則返回false。

本教程操作環(huán)境:windows7系統(tǒng)、ECMAScript 6版、Dell G3電腦。

在ES5中判斷變量是否為數(shù)組

在ES5中,我們至少有如下5種方式去判斷一個(gè)值是否數(shù)組:

var a = []; 
// 1.基于instanceof 
a instanceof Array; 
// 2.基于constructor 
a.constructor === Array; 
// 3.基于Object.prototype.isPrototypeOf 
Array.prototype.isPrototypeOf(a); 
// 4.基于getPrototypeOf 
Object.getPrototypeOf(a) === Array.prototype; 
// 5.基于Object.prototype.toString 
Object.prototype.toString.apply(a) === '[object Array]';

以上,除了Object.prototype.toString外,其它方法都不能正確判斷變量的類型。

要知道,代碼的運(yùn)行環(huán)境十分復(fù)雜,一個(gè)變量可能使用渾身解數(shù)去迷惑它的創(chuàng)造者。且看

var a = {
    __proto__: Array.prototype
}; 
// 分別在控制臺(tái)試運(yùn)行以下代碼 
// 1.基于instanceof 
a instanceof Array; // => true 
// 2.基于constructor 
a.constructor === Array; // => true 
// 3.基于Object.prototype.isPrototypeOf 
Array.prototype.isPrototypeOf(a); // => true 
// 4.基于getPrototypeOf 
Object.getPrototypeOf(a) === Array.prototype; // => true

以上,4種方法將全部返回true,為什么呢?我們只是手動(dòng)指定了某個(gè)對(duì)象的__proto__屬性為Array.prototype,便導(dǎo)致了該對(duì)象繼承了Array對(duì)象,這種毫不負(fù)責(zé)任的繼承方式,使得基于繼承的判斷方案瞬間土崩瓦解。

不僅如此,我們還知道,Array是堆數(shù)據(jù),變量指向的只是它的引用地址,因此每個(gè)頁面的Array對(duì)象引用的地址都是不一樣的。iframe中聲明的數(shù)組,它的構(gòu)造函數(shù)是iframe中的Array對(duì)象。如果在iframe聲明了一個(gè)數(shù)組x,將其賦值給父頁面的變量y,那么在父頁面使用y instanceof Array ,結(jié)果一定是false的。而最后一種返回的是字符串,不會(huì)存在引用問題。實(shí)際上,多頁面或系統(tǒng)之間的交互只有字符串能夠暢行無阻。

在ES6中判斷變量是否為數(shù)組

鑒于數(shù)組的常用性,在ES6中新增了Array.isArray方法,使用此方法判斷變量是否為數(shù)組,則非常簡單,如下:

Array.isArray([]); // => true 
Array.isArray({0: 'a', length: 1}); // => false

實(shí)際上,通過Object.prototype.toString去判斷一個(gè)值的類型,也是各大主流庫的標(biāo)準(zhǔn)。因此Array.isArray的polyfill通常長這樣:

if (!Array.isArray){ 
    Array.isArray = function(arg){ 
        return Object.prototype.toString.call(arg) === '[object Array]'; 
    }; 
}

以上是“es6如何判斷變量是不是數(shù)組”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享題目:es6如何判斷變量是不是數(shù)組
路徑分享:http://bm7419.com/article16/pcsidg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、微信公眾號(hào)、外貿(mào)建站網(wǎng)站策劃、網(wǎng)站制作、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)