成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

通過幾個(gè)事例,就可以說明 for...of 循環(huán)在 JS 是不可或缺

開發(fā) 前端
for...of可以迭代數(shù)組,類似數(shù)組的對(duì)象以及通常所有可迭代的對(duì)象(map,set,DOM集合)。接下我們通過事例來看看 for...of 一些有用的地方。

請(qǐng)教大家一個(gè)問題:什么特性讓該編程語言更加優(yōu)秀?

個(gè)人見解:當(dāng)該特性可以組合多個(gè)其他語言特性時(shí)。

[[323625]]

JavaScript 中的for...of語句就是這種情況,可從ES2015開始使用。

for...of可以迭代數(shù)組,類似數(shù)組的對(duì)象以及通常所有可迭代的對(duì)象(map,set,DOM集合)。

接下我們通過事例來看看 for...of 一些有用的地方。

1. 數(shù)組的迭代

for...of的最常見應(yīng)用是對(duì)數(shù)組項(xiàng)進(jìn)行迭代。該循環(huán)可以很好且短暫地完成它,而無需其他變量來保持索引。

例如:

  1. const products = ['橘子', '蘋果'] 
  2.  
  3. for (const product of products.entries()) { 
  4.   console.log(product) 
  5. // "橘子" 
  6. // "蘋果" 

for...of循環(huán)遍歷products,迭代的每項(xiàng)值分配給變量product。

數(shù)組方法 entries() 可以用于訪問迭代項(xiàng)的索引,該方法在每次迭代時(shí)返回一組鍵值對(duì)[index, item]。

  1. const products = ['橘子', '蘋果'] 
  2.  
  3. for (const [index, product] of products.entries()) { 
  4.   console.log(index, product) 
  5. // 0 "橘子" 
  6. // 1 "蘋果" 

在每次迭代中,products.entries()返回一對(duì)索引和值,它們由const [index,product]表達(dá)式解構(gòu)。

(1) 就地解構(gòu)

首先,讓我們看一下 for...of 循環(huán)的語法:

  1. for (LeftHandSideExpression of Expression) { 
  2.   // statements 

LeftHandSideExpression表達(dá)式可以替換為賦值表達(dá)式左側(cè)的任何內(nèi)容。

在上面的例子中,LeftHandSideExpression是一個(gè)變量聲明 const products,也可以是一個(gè)解構(gòu)表達(dá)式 const [index, product]。

接著,我們遍歷一系列對(duì)象,提取每個(gè)對(duì)象的屬性name :

  1. const persons = [ 
  2.   { name: '前端小智' }, 
  3.   { name: '王大冶' } 
  4.  
  5. for (const { name } of persons) { 
  6.   console.log(name) 
  7.  
  8. // 前端小智 
  9. // 王大冶 

循環(huán)for (const { name } of persons) 遍歷person數(shù)組的對(duì)象,同時(shí)也就地解構(gòu)( {name}) person對(duì)象的 name 屬性值。

2. 類似數(shù)組遍歷

for...of 除了可以遍歷對(duì)象外,還可以遍歷類似數(shù)組的對(duì)象。

arguments是函數(shù)體內(nèi)的特殊變量,表示包含函數(shù)的所有參數(shù),arguments 也是一個(gè)類似數(shù)組對(duì)象。例如:

  1. function sum() { 
  2.   let sum = 0 
  3.   for (const number of arguments) { 
  4.     sum += number 
  5.   } 
  6.  
  7.   return sum 
  8.  
  9. sum(1, 2, 3) // 6 

3.可迭代的簡(jiǎn)要概述JavaScript中的可迭代對(duì)象是什么? 它是一個(gè)支持迭代協(xié)議的對(duì)象。

要檢查數(shù)據(jù)類型是否可迭代,可以配合Symbol.iterator方法。例如,下面的演示顯示了數(shù)組是可迭代的:

  1. const array = [1, 2, 3] 
  2. const iterator = array[Symbol.iterator]() 
  3. iterator.next()  // {value: 1, done: false} 

for...of接受可迭代,這很棒,因?yàn)檫@樣,我們就可以遍歷字符和數(shù)據(jù)結(jié)構(gòu)(數(shù)組,類型化數(shù)組,集合,映射)等。

4. 字符串字符的遍歷

JavaScript 中的原始類型字符串是可迭代的。因此,我們可以輕松地遍歷字符串的字符。

  1. const message = 'hello'
  2.  
  3. for (const character of message) { 
  4.   console.log(character); 
  5. // 'h' 
  6. // 'e' 
  7. // 'l' 
  8. // 'l' 
  9. // 'o' 

message包含一個(gè)字符串值。由于message也是可迭代的,因此for...of循環(huán)遍歷message的字符。

5. Map 與 Set 迭代

Map是一個(gè)特殊的對(duì)象,它將一個(gè)鍵關(guān)聯(lián)到一個(gè)值。鍵可以是任何基本類型(通常是字符串,但也可以是數(shù)字等)

幸運(yùn)的是,Map也是可迭代的(在鍵/值對(duì)上進(jìn)行迭代),所以使用for...of可以輕松地在所有鍵/值對(duì)上循環(huán)遍歷。

  1. const names = new Map() 
  2. names.set(1, 'one') 
  3. names.set(2, 'two') 
  4.  
  5. for (const [numbe, name] of names) { 
  6.   console.log(number, name) 
  7.  
  8. // 1 "one" 
  9. // 2 "two" 

for (const [number, name] of names)在names 鍵/值對(duì)映射上進(jìn)行迭代。

在每個(gè)循環(huán)中,迭代器都會(huì)返回一個(gè)數(shù)組[key,value],并使用const [number,name]立即對(duì)這對(duì)數(shù)組進(jìn)行解構(gòu)。

同樣,以相同的方式可以遍歷Set的項(xiàng):

  1. const colors = new Set(['white', 'blue', 'red', 'white']); 
  2.  
  3. for (color of colors) { 
  4.   console.log(color); 
  5. // 'white' 
  6. // 'blue' 
  7. // 'red' 

6. 遍歷普通 JavaScript 對(duì)象

遍歷普通 JS 對(duì)象的屬性/值對(duì)總是很痛苦的。

通常,我要先使用Object.keys()提取對(duì)象鍵,然后使用forEach()來遍歷鍵數(shù)組:

  1. const person = { 
  2.   name: '前端小智', 
  3.   job: '前端分享者' 
  4.  
  5. Object.keys(person).forEach(prop => { 
  6.   console.log(prop, person[prop]) 
  7. }) 
  8.  
  9. // name 前端小智 
  10. // job 前端分享者 

幸運(yùn)的是,新的Object.entries()函數(shù)與for...of組合提供了一個(gè)不錯(cuò)的選擇:

  1. const person = { 
  2.   name: '前端小智', 
  3.   job: '前端分享者' 
  4.  
  5. for (const [prop, value] of Object.entries(person)) { 
  6.   console.log(prop, value) 
  7.  
  8. // name 前端小智 
  9. // job 前端分享者 

Object.entries(person)返回一個(gè)鍵和值元組數(shù)組:[['name', 'John Smith'], ['job', 'agent']]。然后,對(duì)于for...of循環(huán),遍歷元組,并將每個(gè)元組解構(gòu)const [prop,value]。

7. 遍歷 DOM 集合

你可能知道在 DOM 中使用HTMLCollection是多么令人沮喪。因?yàn)镠TMLCollection是一個(gè)類似數(shù)組的對(duì)象(而不是一個(gè)常規(guī)數(shù)組),所以我們不能使用常規(guī)數(shù)組方法。

例如,每個(gè) DOM 元素的children屬性都是HTMLCollection。因此,由于for...of可以在類似數(shù)組的對(duì)象上進(jìn)行迭代,因此我們可以輕松地迭代子代:

  1. const children = document.body.children; 
  2.  
  3. for (const child of children) { 
  4.   console.log(child); // logs each child of <body> 

此外,for...of可以遍歷NodeList集合(可迭代)。例如,函數(shù)document.querySelectorAll(query)返回一個(gè)NodeList。

  1. const allImages = document.querySelectorAll('img'); 
  2.  
  3. for (const image of allImages) { 
  4.   console.log(image); // log each image in the document 

如果你想遍歷 DOM 中的不同種類的集合,那么for...of語句是一個(gè)不錯(cuò)的選擇。

8. 性能

在遍歷大數(shù)組時(shí),for...of的速度可能比 for 要慢:

  1. const a = [/* big array */]; 
  2. for (let i = 0; i < a.length; i++) { 
  3.   console.log(a[i]); 

在每次迭代中調(diào)用迭代器比通過增加索引訪問該項(xiàng)目的開銷更大。但是,這種細(xì)微差別在使用大型陣列的應(yīng)用程序中以及性能至關(guān)重要的應(yīng)用程序中非常重要,這種情況很少發(fā)生。

 

責(zé)任編輯:趙寧寧 來源: 大遷世界
相關(guān)推薦

2019-08-05 10:00:13

LinuxBash命令

2013-09-18 09:40:32

企業(yè)BYOD企業(yè)應(yīng)用商店

2024-11-12 12:19:39

2020-05-07 18:20:52

Git腳本Linux開源

2020-10-27 12:43:53

數(shù)據(jù)分析技術(shù)工具

2021-11-30 05:51:46

React開發(fā)工具

2020-11-09 06:51:46

開源工具開源

2015-05-07 13:38:15

2013-01-04 09:53:32

大數(shù)據(jù)技術(shù)大數(shù)據(jù)

2024-12-03 10:55:56

微服務(wù)架構(gòu)注冊(cè)中心

2011-02-22 08:55:42

Chrome企業(yè)瀏覽器

2014-06-24 09:31:02

信息安全IT安全首席安全官

2017-03-27 17:53:45

Linux

2012-04-18 17:06:41

PhoneGap

2014-01-09 14:25:19

MacOS X工具

2011-07-21 10:52:05

應(yīng)用交付IPv6

2013-03-29 15:19:05

2009-07-08 14:24:43

Java日志系統(tǒng)跟蹤調(diào)試

2012-08-22 09:35:39

云計(jì)算固態(tài)硬盤SAS傳統(tǒng)硬盤

2023-05-04 12:37:24

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 毛片1| 成人特区 | 狠狠狠干| 日韩欧美精品在线 | 91亚洲国产精品 | 精品国产欧美一区二区 | 欧美亚洲国产日韩 | av网站在线播放 | 欧美精选一区二区 | 欧美成人二区 | 九九热在线免费视频 | 99免费看 | 亚洲国产aⅴ精品一区二区 免费观看av | 国产精品五区 | 日本一区二区三区视频在线 | 91精品国产自产精品男人的天堂 | 成人免费视屏 | 亚洲在线免费观看 | 99久久精品国产一区二区三区 | 国产一区二 | 成人欧美一区二区三区白人 | 亚洲高清视频在线观看 | 国产一二区视频 | 超碰在线97国产 | 涩涩视频在线观看 | 日韩高清一区二区 | 日韩欧美国产一区二区三区 | 精品国产第一区二区三区 | 久久99深爱久久99精品 | 国产精品乱码一区二区三区 | 自拍第1页 | 国产精品精品久久久 | 日韩一区二区三区视频 | 国产日韩欧美一区 | 欧美一区二区三区在线观看视频 | 四虎影院在线观看av | www.色.com| 亚洲女人天堂成人av在线 | 国产精品一区二区av | 91人人澡人人爽 | 黄色免费在线网址 |