您好,登錄后才能下訂單哦!
這篇文章主要介紹“JavaScript中的iterable有什么作用”,在日常操作中,相信很多人在JavaScript中的iterable有什么作用問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”JavaScript中的iterable有什么作用”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
遍歷Array可以采用下標(biāo)循環(huán),遍歷Map和Set就無(wú)法使用下標(biāo)。為了統(tǒng)一集合類型,ES6標(biāo)準(zhǔn)引入了新的iterable類型,Array、Map和Set都屬于iterable類型。
具有iterable
類型的集合可以通過(guò)新的for ... of
循環(huán)來(lái)遍歷。
for ... of
循環(huán)是ES6引入的新的語(yǔ)法,請(qǐng)測(cè)試你的瀏覽器是否支持:
'use strict'; var a = [1, 2, 3]; for (var x of a) { } alert('你的瀏覽器支持for ... of');
用for ... of
循環(huán)遍歷集合,用法如下:
var a = ['A', 'B', 'C']; var s = new Set(['A', 'B', 'C']); var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); for (var x of a) { // 遍歷Array alert(x); } for (var x of s) { // 遍歷Set alert(x); } for (var x of m) { // 遍歷Map alert(x[0] + '=' + x[1]); }
你可能會(huì)有疑問(wèn),for ... of循環(huán)和for ... in循環(huán)有何區(qū)別?
for ... in
循環(huán)由于歷史遺留問(wèn)題,它遍歷的實(shí)際上是對(duì)象的屬性名稱。一個(gè)Array
數(shù)組實(shí)際上也是一個(gè)對(duì)象,它的每個(gè)元素的索引被視為一個(gè)屬性。
當(dāng)我們手動(dòng)給Array對(duì)象添加了額外的屬性后,for ... in循環(huán)將帶來(lái)意想不到的意外效果:
var a = ['A', 'B', 'C']; a.name = 'Hello'; for (var x in a) { alert(x); // '0', '1', '2', 'name' } for ... in循環(huán)將把name包括在內(nèi),但Array的length屬性卻不包括在內(nèi)。 for ... of循環(huán)則完全修復(fù)了這些問(wèn)題,它只循環(huán)集合本身的元素: var a = ['A', 'B', 'C']; a.name = 'Hello'; for (var x of a) { alert(x); // 'A', 'B', 'C' }
這就是為什么要引入新的for ... of
循環(huán)。
然而,更好的方式是直接使用iterable內(nèi)置的forEach方法,它接收一個(gè)函數(shù),每次迭代就自動(dòng)回調(diào)該函數(shù)。以Array為例:
var a = ['A', 'B', 'C']; a.forEach(function (element, index, array) { // element: 指向當(dāng)前元素的值 // index: 指向當(dāng)前索引 // array: 指向Array對(duì)象本身 alert(element); });
注意,forEach()方法是ES5.1標(biāo)準(zhǔn)引入的,你需要測(cè)試瀏覽器是否支持。
Set
與Array
類似,但Set
沒(méi)有索引,因此回調(diào)函數(shù)的前兩個(gè)參數(shù)都是元素本身:
var s = new Set(['A', 'B', 'C']); s.forEach(function (element, sameElement, set) { alert(element); });
Map
的回調(diào)函數(shù)參數(shù)依次為value
、key
和map
本身:
var m = new Map([[1, 'x'], [2, 'y'], [3, 'z']]); m.forEach(function (value, key, map) { alert(value); });
如果對(duì)某些參數(shù)不感興趣,由于JavaScript的函數(shù)調(diào)用不要求參數(shù)必須一致,因此可以忽略它們。例如,只需要獲得Array
的element
:
var a = ['A', 'B', 'C']; a.forEach(function (element) { alert(element); });
到此,關(guān)于“JavaScript中的iterable有什么作用”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。