lterator 迭代器 静态属性Symbol.iterator Symbol(Symbol.iterator)
**
lterator迭代器
**
迭代模式:提供一種方法是可以順序獲得聚合對象中的各個元素,是一種最簡單也最常見的設計模式。他可以讓用戶透過特定的接口巡防集合中的每一個元素而不用了解底層的實現
迭代器簡介:依照迭代模式的思想而實現,分為內部迭代器和外部迭代器
內部迭代:本身是函數,該函數內部定義好迭代規則,完全接手整個迭代過程
外部:只需要一次初始話的調用Array.prototype.forEach jQuery.each內部迭代器
外部迭代器:本身是函數,執行返回迭代對象,迭代下一個元素必須顯示調用,調用復雜度增加,但靈活性增強。function outerItreator(){}外部迭代器
// 外部迭代器let arr = [1,2,3,4]function outerItreator(o){let index = 0;let next = () =>{return {value: o[index],done: o.length == ++index}}return {next}} let os = outerItreator(arr);lterator 的目的:就是要標準化迭代操作
舉個例子:服務器提數組數據給前端,前端for循環遍歷,但由于業務變化,使得數據結構發生了變化,返回對象或者Set,Map,導致前端遍歷代碼大量重寫
解決方案:ES6引入Iterator,部署在NodeList,arguments,Array,Set,Map,字符串上等數據的Symbol.iterator屬性。使得這些數據是iterable可迭代的,能進行for of,for in ,for…,Array.from等操作
**
Symbol
**
數據結構:第七種數據結構;
特點:唯一,可作為對象的屬性,有靜態屬性Symbol.iterator
演示代碼:1:let os = Symbol("abc") console.log(typeof os,os)==>Symbol,Symbol("abc")
2:let os = Symbol({}) console.log(os) ==>Symbol([object object])
3:let os = Symbol({name:'zsh',tostring:function (){return 'abc'}}) console.log==> Symbol("abc")
4:let os1 = Symbol("abc") let os2 = Symbol("abc") console.log(os1 === os2)==>false
代碼如下添加迭代器(如果不添加[Symbol.iterator]就會報錯)
總結
以上是生活随笔為你收集整理的lterator 迭代器 静态属性Symbol.iterator Symbol(Symbol.iterator)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Project ERROR: Canno
- 下一篇: numpy生成随机整数