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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

lterator 迭代器 静态属性Symbol.iterator Symbol(Symbol.iterator)

發布時間:2024/3/12 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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]就會報錯)

// ES6添加迭代器 let obj ={0:"a",1:"b",2:"c",length:3,[Symbol.iterator]:function(){let index = 0;let next =() =>{return {value:this[index],done:this.length == ++index,}}return {next}} }for(prop of obj){console.log(prop) } console.log([...obj])

總結

以上是生活随笔為你收集整理的lterator 迭代器 静态属性Symbol.iterator Symbol(Symbol.iterator)的全部內容,希望文章能夠幫你解決所遇到的問題。

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