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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

可迭代协议与for-of循环

發布時間:2024/2/28 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 可迭代协议与for-of循环 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上篇說到迭代可以按照一定的規則,從指定的空間中取出數據。區別于循環的是,迭代過程不知道數據的長度,也不知道要取多少個數據。迭代器(iterator)是一個具有next方法的對象,next方法返回下一個數據并且能指示是否迭代完成;迭代器創建函數是一個返回迭代器的函數。這一篇來講一下可迭代協議和for-of循環。

1.可迭代協議

ES6規定,如果一個對象具有知名符號屬性Symbol.iterator,并且屬性值是一個迭代器創建函數,則該對象是可迭代的(iterable)

【注】判斷一個對象是否可迭代,就是查看該對象中是否存在屬性Symbol.iterator。上篇中我們對數組進行了迭代,現在打印一個數組,查看它的proto,如下

const arr = [1, 3, 4, 2]; console.log(arr)

【注】遍歷可迭代對象的方法,上一篇我們用了while循環來判斷是否進入迭代過程,es6提供了for-of循環來進行迭代,下面還是將while的例子拿過來再康康

const arr = [1, 3, 4, 2]; const iterator = arr[Symbol.iterator](); let result = iterator.next(); while (!result.done) {const item = result.value;console.log(item);result = iterator.next() } 圖1

?2.for-of循環

for-of循環用于遍歷可迭代對象,for(const item of iterable) {},如下例,其打印結果同圖1

const arr = [1, 3, 4, 2]; for (const iterator of arr) {console.log(iterator) }

3.展開運算符與可迭代對象

展開運算符可以作用于可迭代對象,這樣就可以輕松的將可迭代對象轉換為數組

const obj = {a: 1,b: 2,[Symbol.iterator]() {const keys = Object.keys(this);console.log(keys);let i = 0;return {next: () => {const propName = keys[i];const propValue = this[propName];const result = {value: {propName,propValue},done: i >= keys.length}i++;return result;}}} } const arr = [...obj]; console.log(arr); function test(a, b) {console.log(a, b) } test(...obj)

?

超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

總結

以上是生活随笔為你收集整理的可迭代协议与for-of循环的全部內容,希望文章能夠幫你解決所遇到的問題。

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