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

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:申請域名、雅安服務器托管、營銷軟件、網站建設、昌邑網站維護、網站推廣。
在es6中,可以利用Array的isArray()方法來判斷變量是不是數組,該方法用于判斷一個對象是否為數組類型,語法“Array.isArray(obj)”;如果對象是數組返回true,否則返回false。
本教程操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。
在ES5中判斷變量是否為數組
在ES5中,我們至少有如下5種方式去判斷一個值是否數組:
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外,其它方法都不能正確判斷變量的類型。
要知道,代碼的運行環境十分復雜,一個變量可能使用渾身解數去迷惑它的創造者。且看
var a = {
__proto__: Array.prototype
};
// 分別在控制臺試運行以下代碼
// 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,為什么呢?我們只是手動指定了某個對象的__proto__屬性為Array.prototype,便導致了該對象繼承了Array對象,這種毫不負責任的繼承方式,使得基于繼承的判斷方案瞬間土崩瓦解。
不僅如此,我們還知道,Array是堆數據,變量指向的只是它的引用地址,因此每個頁面的Array對象引用的地址都是不一樣的。iframe中聲明的數組,它的構造函數是iframe中的Array對象。如果在iframe聲明了一個數組x,將其賦值給父頁面的變量y,那么在父頁面使用y instanceof Array ,結果一定是false的。而最后一種返回的是字符串,不會存在引用問題。實際上,多頁面或系統之間的交互只有字符串能夠暢行無阻。
在ES6中判斷變量是否為數組
鑒于數組的常用性,在ES6中新增了Array.isArray方法,使用此方法判斷變量是否為數組,則非常簡單,如下:
Array.isArray([]); // => true
Array.isArray({0: 'a', length: 1}); // => false實際上,通過Object.prototype.toString去判斷一個值的類型,也是各大主流庫的標準。因此Array.isArray的polyfill通常長這樣:
if (!Array.isArray){
Array.isArray = function(arg){
return Object.prototype.toString.call(arg) === '[object Array]';
};
}以上是“es6如何判斷變量是不是數組”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創新互聯行業資訊頻道!
網站名稱:es6如何判斷變量是不是數組
URL網址:http://www.yijiale78.com/article16/pcsidg.html
成都網站建設公司_創新互聯,為您提供標簽優化、品牌網站設計、網站營銷、定制開發、網站排名、網站導航
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯