ES6 lterator迭代器是个什么东西?有什么用?
文章目錄
- Iterator
- 1 介紹
- 2 迭代過程
- 3 可迭代的數據結構
- 普通對象不可迭代
- for...of循環
- 可迭代的數據結構
- 可迭代的數據結構
Iterator
1 介紹
Iterator 是 ES6 引入的一種新的遍歷機制,迭代器有兩個核心概念:
- 迭代器是一個統一的接口,它的作用是使各種數據結構可被便捷的訪問,它是通過一個鍵為Symbol.iterator 的方法來實現。
- 迭代器是用于遍歷數據結構元素的指針(如數據庫中的游標)。
2 迭代過程
迭代的過程如下:
- 創建:通過 Symbol.iterator 創建一個迭代器,指向當前數據結構的起始位置
- 迭代指向:通過 next 方法進行向下迭代指向下一個位置, next 方法會返回當前位置的對象,對象包含了 value 和 done 兩個屬性,
- value 是當前屬性的值;
- done 用于判斷是否遍歷結束。
- 當 done 為 true 時則遍歷結束
Demo:
- 首先聲明一個數組,通過Symbol.iterator創建一個迭代器,之后通過.next()方法對數組內的數據項進行訪問,返回value和done兩個屬性,value表示訪問的當前數據項,done是布爾值,當為true時遍歷結束。
- 迭代器是協議(使用它們的規則)的一部分,用于迭代。該協議的一個關鍵特性就是它是順序的:迭代器一次返回一個值。這意味著如果可迭代數據結構是非線性的(例如樹),迭代將會使其線性化。
3 可迭代的數據結構
以下是可迭代的值:
- Array
- String
- Map
- Set
- Dom元素(正在進行中)
使用 for…of 循環(參見下文的 for…of 循環)對數據結構進行迭代。
- Array
數組 ( Array ) 和類型數組 ( TypedArray ) 他們是可迭代的。
for (let item of ["zero", "one", "two"]) { console.log(item); } // output: // zero // one // two- String
字符串是可迭代的,單他們遍歷的是 Unicode 碼,每個碼可能包含一個到兩個的 Javascript 字符。
for (const c of 'z\uD83D\uDC0A') { console.log(c); } // output: // z // \uD83D\uDC0A- Map
Map 主要是迭代它們的 entries ,每個 entry 都會被編碼為 [key, value] 的項, entries 是以確定的形勢進行迭代,其順序是與添加的順序相同。
const map = new Map(); map.set(0, "zero"); map.set(1, "one"); for (let item of map) { console.log(item); } // output: // [0, "zero"] // [1, "one"]注意: WeakMaps 不可迭代
- Set
Set 是對其元素進行迭代,迭代的順序與其添加的順序相同
const set = new Set(); set.add("zero"); set.add("one"); for (let item of set) { console.log(item); } // output: // zero // one注意: WeakSets 不可迭代
- arguments
arguments 目前在 ES6 中使用越來越少,但也是可遍歷的
function args() { for (let item of arguments) { console.log(item); } } args("zero", "one"); // output: // zero // one普通對象不可迭代
普通對象是由 object 創建的,不可迭代:
// TypeError for (let item of {}) { console.log(item); }for…of循環
for…of 是 ES6 新引入的循環,用于替代 for…in 和 forEach() ,并且支持新的迭代協議。它可用于迭代常規的數據類型,如 Array 、 String 、 Map 和 Set 等等。
可迭代的數據結構
of 操作數必須是可迭代,這意味著如果是普通對象則無法進行迭代。如果數據結構類似于數組的形式,則可以借助 Array.from() 方法進行轉換迭代。
p 和 Set 等等。
可迭代的數據結構
of 操作數必須是可迭代,這意味著如果是普通對象則無法進行迭代。如果數據結構類似于數組的形式,則可以借助 Array.from() 方法進行轉換迭代。
總結
以上是生活随笔為你收集整理的ES6 lterator迭代器是个什么东西?有什么用?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue 菜单路由重复点击报错
- 下一篇: numpy.random.randint