es6中map set arr obj 這4種數據對象 這樣就須要一種統一的接口機制來處理全部不一樣的數據結構
做用:
一、爲各類數據結構提供一個同一的、簡便的數據接口
二、使得數據結構的成員按照某種次序排列
三、es6 新增了 for..of循環 來遍歷iteratores6
iterator就是經過不斷的next來訪問值{value:value}數組
var arr=[1,2,3] function iterator(arr) { let index=0; return { next:function () { return index<arr.length?{value:arr[index++],done:false}:{value:undefined,done:true} } } } const it=iterator(arr); console.log(it.next()) 返回一個包含value 和done屬性的對象 console.log(it.next()) console.log(it.next()) console.log(it.next())
數組 set map 字符串 天生具有iterator遍歷器接口數據結構
是否具備Symbol.iterator屬性code
var arr1=[1,2,3]; var set1=new Set(['a','b','c']) var map1=new Map([['a',1],['b',2]]) //必定要正確的定義Map var str="sasa"; var ai=arr1[Symbol.iterator](); var si=set1[Symbol.iterator](); var mi=map1[Symbol.iterator](); console.log(ai,si,mi) //就會返回數組、集合、map的遍歷器接口 console.log(str[Symbol.iterator]()) 字符串的遍歷器接口
可是object是沒有Symbol.iterator這個屬性的對象
var obj={}; console.log(obj[Symbol.iterator]()) //報錯
一、解構賦值
二、擴展運算符 ...將一個數據結構展開接口
var str="sasa"; var arrstr=[...str]; console.log(arrstr)
利用這個原理實現數組去重字符串
var arrchong=[1,2,3,1,1,3,34,4,1]; console.log([...(new Set(arrchong))])
三、均可以是用for of循環it
var arrchong=[1,2,3,1,1,3,34,4,1]; for(let i of arrchong){ console.log(i) }