日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

第十三节:易学又实用的新特性:for...of

發布時間:2025/3/15 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十三节:易学又实用的新特性:for...of 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

????????前面幾節的內容稍微偏長,代碼也不少,估計有基礎的同學才會跟得上,不知道大家有沒有看懵了。這節來點簡單但又很實用的知識,沒錯,就是for...of。

for...of 是什么

????????for...of 一種用于遍歷數據結構的方法。它可遍歷的對象包括數組,對象,字符串,set和map結構等具有iterator 接口的數據結構。

????????(上面這句話如果有看不懂的地方,自動忽略即可,后續會有章節介紹。)

????????下面就以大家熟悉的數組為例來介紹for...of。

????

????????遍歷數組早就不是什么新鮮事,我們有好幾種方法去完成,此時ES6給我們帶來一個新的遍歷方法for...of,難道它有更牛逼的地方?

????????接下來,我們先來看看幾種傳統的遍歷數組的方式以及它們的缺陷。

方式一


? ?var arr = [1,2,3,4,5];
? ?for(let i = 0;i<arr.length;i++){
??? ? ? //...
? ?}

????????方式一利用for循環來遍歷數組的缺點就是:代碼不夠簡潔。

????????下面介紹一個寫法更加簡潔的方式。

?

方式二


? ?var arr = [1,2,3,4,5];
? ?arr.forEach(function (value,index) {
?? ? ? //...
? ?});
? ?

????????利用forEach循環代碼量少了很多,寫法更加簡潔,缺點就是:無法中斷停止整個循環。

方式三


? ?var arr = [1,2,3,4,5];
? ?for(let i in arr){
??? ? ? //...
? ?}
? ?

????????for...in循環更常用于對象的循環,如果用于數組的循環,那么就要注意了,上述代碼中每次循環中得到的i是字符串類型,而不是預料中的數字類型,要想對它進行運算,那得先要進行類型轉換,造成不方便。

????????既然上面的幾種方式都存在不足,新增的遍歷方式for...of會比它們更好嗎?答案是肯定的。

????????我們來看看for...of的是實現:


? ?var arr = [1,2,3,4,5];
? ?for(let value of arr){
??? ? ? console.log(value);
? ?}
? ?//打印結果:依次輸出:1 2 3 4 5

????????看樣子是不是有點眼熟,很像for...in?確實很像。它的實現跟for...in很類似。

????????我們列舉一下for...of的優勢:

  • 寫法比for循環簡潔很多;

  • 可以用break來終止整個循環,或者continute來跳出當前循環,繼續后面的循環;

  • 結合keys( )獲取到循環的索引,并且是數字類型,而不是字符串類型。

  • ????我們分別來展示一下上述的幾個優點:

    循環可以終止


    ? ?var arr = [1,2,3,4,5];
    ? ?for(let value of arr){
    ??? ? ? if(value == 3){
    ??????? ? ? //終止整個循環
    ? ? ? ? ? ?break;
    ??? ? ? }
    ??? ? ? console.log(value);
    ? ?}
    ? ?//打印結果:1 2

    ????????

    ????????以上案例:用break實現了終止整個循環,不會繼續后面的遍歷,所以打印結果為:1? 2。

    ?

    可跳過當前循環


    ? ?var arr = [1,2,3,4,5];
    ? ?for(let value of arr){
    ??? ? ? if(value == 3){
    ??????? ? ? //跳過當前循環,繼續后面的循環
    ? ? ? ? ? ?continue;
    ??? ? ? }
    ??? ? ? console.log(value);
    ? ?}
    ? ?//打印結果:1 2 4? 5

    ????????用continue跳過當前循環,繼續后面的循環,所以打印結果為:1? 2? 4? 5。

    得到數字類型的索引


    ? ?var arr = [1,2,3,4,5];
    ? ?for(let index of arr.keys()){
    ??? ? ? console.log(index);
    ? ?}
    ? ?//打印結果:依次輸出:0 1 2 3 4

    ????????使用數組的擴展keys( )(第八節有介紹,點擊查看),獲取鍵名再遍歷,得到的index是數字類型的。

    ?

    ????????此外,相比于for...in循環專門為對象設計,for...of循環的適用范圍更廣。

    遍歷字符串

    ????????for...of 支持字符串的遍歷。


    ? ?let word = "我是前端君";
    ? ?for(let w of word){
    ??? ? ? console.log(w);
    ? ?}
    ? ?//打印結果:我 ?是 ?前 ?端 ?君

    遍歷DOM List

    ????????for...of支持類數組的遍歷,例如DOM List。


    ? ?<p>1</p>
    ? ?<p>2</p>
    ? ?<p>3</p>
    ? ?//假設有3個p元素
    ? ?let pList = document.getElementsByTagName('p');

    ? ?for(let p of pList){
    ??? ? ? console.log(p);
    ? ?}
    ? ?// 打印結果:<p>1</p>
    ? ?//???????? ?<p>2</p>
    ? ?//???????? ?<p>3</p>

    ????????for...of支持set和map解構的遍歷,考慮到set和map我們還沒學習,我們在后面章節一并講解。

    ?

    ????????這節是近期最簡短、最易學的一個章節了,希望大家多能看懂。

    本節小結

    總結:for...of一種新的遍歷方式,能遍歷的對象有:數組,類數組對象,字符串,set和map結構等具有iterator接口的數據結構。而且for...in更適合用于對象的遍歷。

    總結

    以上是生活随笔為你收集整理的第十三节:易学又实用的新特性:for...of的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。