ES6—— iterator和for-of循環
阿新 • • 發佈:2018-08-05
nbsp lse function map size key con 部署 sym
Iterator 遍歷器的作用:
為各種數據結構,提供一個同意的,簡便的訪問接口。
是的數據結構的成員能夠按某種次序排列。
ES6 新增了遍歷命令 for...of 循環,Iterator接口主要供 for...of 消費。
1、手寫Iterator接口。
const arr=[ 1,2,3 ]; function iterator(arr){ let index=0; return { return index<arr.length?{value:arr[index++],done:false}:{value:undefined,done:true} } } const it=iterator(arr); console.log(it.next()); console.log(it.next()); console.log(it.next()); console.log(it.next()); ///第四條 輸出 undefined
2、凡是具有 Symbol.iterator 屬性的數據結構都具有 Iterator 接口。
const arr=[1,2,3]; const set=new Set(["a","b","c"]); const map = new Map([["a":1]]); const itArr=arr[Symbol.iterator](); const itSetr=arr[Symbol.iterator](); const itMap =arr[Symbol.iterator](); console.log(itSet.next()); console.log(itSet.next()); console.log(itSet.next()); console.log(itSet.next()); ///第四條 輸出 undefined const obj = {}; console.log(obj[Symbol.iterator]); 對於空的 直接輸出 undefined
3、具備iterator接口的數據結構都可以進行如下操作
結構賦值。
擴展運算符。
let str="miaov"; let arrstr=[...str]; console.log(arrstr); //輸出 m.i . a.o.v const arr2=[1,"a","a","b","b"]; console.log([...new set(arr2)]) ; //輸出結構為 1,a,b
4、for...of 循環
const ofArr=[1,2,3,4]; for ( let i of ofArr){ console.log(i); } const m = new Map(); m.set("a",1).set("b",2) for(let[key,value] of m){ console.log(key,value); }
//如何給一個不具備iterator結構的數據結構部署一個iterator接口?
const d={ "0":"a", "1":"b", "2":"c", "3":"d", "4":"e", length:5 };
以上。
ES6—— iterator和for-of循環