gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

es6的for of可以遍歷對象嗎

es6的“for of”不能遍歷對象。原因:ES6中引入了Iterator接口,只有提供了Iterator接口的數據類型才可以使用“for-of”來循環遍歷;而普通對象默認沒有提供Iterator接口,因此無法用“for-of”來進行遍歷。

es6的for of可以遍歷對象嗎

本教程操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。

隨著前端的不斷發展,光循環就出現了好多種方法,for、forEach、do..while、for…in等等,不過這些循環也都各有各的應用場景和優缺點。

ES6又為我們提供了新的循環方法for…of,它可以循環字符串、數組及其他類數組對象,那作為最普遍存在的Object對象,按理,可以循環?

我們看一下下方的代碼示例:

{     // 迭代數組   const iterable = ['a', 'b'];   for (const value of iterable) {     console.log(value);   }   // output: a b } {     // 普通對象     const obj = {       a: 'A',       b: 'B'     }     for(const item of obj){       console.log(item)     }     // Uncaught TypeError: obj is not iterable }

oh no,報錯了:Uncaught TypeError: obj is not iterable。提示obj是不可迭代的,顯然直接用for...of去遍歷Object對象是不行的。

那么可以遍歷大部分數據結構的for…of為何不能遍歷Object對象?

原因:

ES6 中引入了 Iterator,只有提供了 Iterator 接口的數據類型才可以使用 for-of 來循環遍歷,而 Array、Set、Map、某些類數組如 arguments 等數據類型都默認提供了 Iterator 接口,所以它們可以使用 for-of 來進行遍歷。

而對于普通的對象,for…of結構不能直接使用,會報錯,提示obj is not iterable,也就是說普通對象默認沒有Iterator接口,必須部署了 Iterator 接口后才能使用。

怎么解決?讓for-of 遍歷對象

那么原因清楚了,該怎么解決呢?能不能為對象已經其它的一些數據類型提供 Iterator 接口呢

答案是可以的,ES6 同時提供了 Symbol.iterator 屬性,只要一個數據結構有這個屬性,就會被視為有 Iterator 接口,接著就是如何實現這個接口了,如下就是一個最簡實現:

newObj[Symbol.iterator] = function(){     let index = 0         , self = this         , keys = Object.keys( self )         ;          return {         next(){             if( index < keys.length ){                 return {                     value: self[keys[index++]]                     , done: false                 };             }             else{                 return {                     value: undefined                     , done: true                 }             }         }     }; };

仔細看一下發現就會發現 Symbol.iterator 接口其實是一個 Generator 函數,那么就可以簡化代碼:

newObj[Symbol.iterator] = function* (){     let keys = Object.keys( this )         ;          for(let i = 0, l = keys.length; i < l; i++){         yield this[keys[i]];     } }  for(let v of newObj){     console.log( v ); } // 輸出結果 // 5 // 6

值得注意的是 Object.keys 碰巧解決了之前 for-in 遇到的繼承問題

這樣滿足了我們的期望,使用 for-of 來遍歷對象,但是好像哪里不對,我們遍歷對象時一般都是期望同時輸出 key 和 value 的,這樣調整一下代碼

newObj[Symbol.iterator] = function* (){     let keys = Object.keys( this )         ;          for(let i = 0, l = keys.length; i < l; i++){         yield {             key: keys[i]             , value: this[keys[i]]         };     } }  for(let v of newObj){     console.log( v ); } // 輸出結果 // {key: "e", value: 5} // {key: "f", value: 6}

這樣返回了一個對象,似乎又很不舒服,我們能不能嘗試一些解構賦值呢。。。

for(let {key, value} of newObj){     console.log(key, value ); } // 輸出結果 // e 5 // f 6

這樣似乎非常完美了。。。

擴展知識:for-of和其他循環的區別

循環名稱 循環對象 是否可中斷循環 是否有返回值
for for循環體的length 可以 無返回值
forEach 僅可循環數組、map、set等,不可循環字符串、普通對象 不可以 無返回值
do...while 滿足某種條件,則可一直循環,至少循環一次 可以 無返回值
while 滿足某種條件,則可一直循環 可以 無返回值
map 組成新的數組成員,僅可循環數組,不可循環字符串、普通對象,set、map 不可中斷 返回新數組,不影響原數組
filter 過濾數組成員,僅可循環數組,不可循環字符串、普通對象,set、map 不可中斷 返回新數組,不影響原數組
for...in 可循環數組、對象,不可循環map、set。可遍歷數字鍵名,還可遍歷手動添加的其他鍵,甚至包括原型鏈上的鍵 可以 無返回值
for...of 循環可迭代的對象,不可循環普通對象(統一數據結構遍歷) 可以 無返回值

贊(0)
分享到: 更多 (0)
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
日韩不卡一二区| 97免费视频观看| 北条麻妃av高潮尖叫在线观看| www.黄色网址.com| 成年人黄色在线观看| 色黄视频免费看| 欧美爱爱视频网站| 欧洲金发美女大战黑人| 永久免费网站视频在线观看| 欧美 另类 交| 成人在线免费观看视频网站| 六月婷婷激情综合| 久久久久久久久久网| 成年人网站免费视频| 妞干网在线视频观看| 黑人糟蹋人妻hd中文字幕| 不卡影院一区二区| 亚洲综合激情视频| 青青草综合视频| 亚洲熟妇国产熟妇肥婆| 成人精品视频一区二区| 国产三级生活片| 国产女主播自拍| 超碰在线人人爱| 国产小视频免费| 欧美在线观看视频网站| 樱花草www在线| 亚洲美免无码中文字幕在线| 免费日韩中文字幕| 男女爱爱视频网站| 三级在线免费看| 强开小嫩苞一区二区三区网站| 日本a在线免费观看| 超碰在线公开97| 久久这里只有精品18| 牛夜精品久久久久久久| 人妻av无码专区| 日韩av卡一卡二| 女人和拘做爰正片视频| 免费看啪啪网站| 一级黄色香蕉视频| 精品无码国产一区二区三区av| 密臀av一区二区三区| 91国在线高清视频| av在线网址导航| 国产成人精品无码播放| 阿v天堂2018| 99久久久无码国产精品性色戒| 男女av免费观看| 国产九色porny| av中文字幕av| 国内精品国产三级国产aⅴ久| 一本久道中文无码字幕av| 黄色a级片免费看| 国产又黄又爽免费视频| 国产无遮挡猛进猛出免费软件 | 日韩免费毛片视频| 久久这里只有精品18| 亚洲av毛片在线观看| xxww在线观看| 中文字幕国产免费| 国产福利在线免费| 一本岛在线视频| av在线无限看| 在线免费视频a| 午夜免费福利在线| 男女污污的视频| 成人午夜免费剧场| 不卡的av中文字幕| 天天插天天操天天射| 激情婷婷综合网| 91蝌蚪视频在线观看| www.亚洲高清| www.国产福利| 超级碰在线观看| 国产内射老熟女aaaa| 日本一本中文字幕| 男人添女荫道口图片| 老太脱裤让老头玩ⅹxxxx| 国产午夜福利在线播放| 一区二区传媒有限公司| 久久网站免费视频| 草草草在线视频| 青青草久久伊人| 亚洲五码在线观看视频| 无码人妻精品一区二区三区66| 一级黄色片国产| 欧美日韩中文字幕在线播放| 17c丨国产丨精品视频| 国产高清av在线播放| 久草精品在线播放| 污视频网址在线观看| 加勒比海盗1在线观看免费国语版| bt天堂新版中文在线地址| 欧美一级片中文字幕 | 欧美视频第三页| 久久精品国产99久久99久久久| 成人国产在线看| 日韩中文字幕二区| 黄色www在线观看| 欧美日韩激情视频在线观看| 自拍偷拍一区二区三区四区| 女人被男人躁得好爽免费视频| 国产精品少妇在线视频| 成人在线观看毛片| 中文字幕久久av| 国产裸体舞一区二区三区| 天天综合天天添夜夜添狠狠添| 黄色www在线观看| 黄色a级片免费| 日韩免费在线观看av| 性欧美在线视频| 男人天堂999| 佐佐木明希av| 久久婷五月综合| 男人天堂网视频| 欧美午夜小视频| 黄色免费高清视频| 亚洲欧美在线精品| 男人天堂999| 精品国产一二三四区| 99热这里只有精品免费| 亚洲网中文字幕| 91免费视频污| 天天综合网日韩| av在线无限看| 中文字幕国产传媒| 欧美激情国产精品日韩| 欧洲黄色一级视频| 日韩欧美一区三区| 日韩精品视频久久| 国产一区二区在线视频播放| 黄色三级中文字幕| 亚洲色欲久久久综合网东京热| mm131午夜| 无码av天堂一区二区三区| 成人区一区二区| 日韩在线观看a| 男人添女人下面高潮视频| 欧美成人高潮一二区在线看| 久久精品国产sm调教网站演员| 日韩美女爱爱视频| 黄色一级片播放| 天天插天天操天天射| 中文字幕第100页| 日韩精品aaa| 日本黄网站色大片免费观看| 国产激情片在线观看| r级无码视频在线观看| 黄色网页免费在线观看| 欧美私人情侣网站| www.cao超碰| 丰满少妇大力进入| 国产精品第12页| 国产成人精品免费看在线播放 | 亚洲第一狼人区| 国产性生活一级片| 91视频 - 88av| 国产精品动漫网站| 超碰中文字幕在线观看| 日韩中文字幕在线免费| caopor在线视频| 肉大捧一出免费观看网站在线播放| 国产真人做爰毛片视频直播| 无码人妻h动漫| 日本xxxxx18| 青青草精品视频在线观看| 超碰在线免费观看97| av天堂永久资源网| 激情综合网俺也去| 97在线免费公开视频| 国产无遮挡猛进猛出免费软件| 大胆欧美熟妇xx| 成人黄色一级大片| 国产91在线免费| 国产激情片在线观看| xx欧美撒尿嘘撒尿xx| 妺妺窝人体色777777| 亚洲AV无码成人精品一区| 国产裸体舞一区二区三区| 中文字幕色呦呦| 中文字幕在线视频一区二区| 久久久免费视频网站| 国产精品无码电影在线观看 | 色哟哟免费网站| 久久午夜夜伦鲁鲁一区二区| 黄色激情在线视频| 日韩视频在线免费播放| 色播五月激情五月| 无码内射中文字幕岛国片| 久久亚洲中文字幕无码| www.avtt| 亚洲 欧美 综合 另类 中字| www亚洲国产| 欧美亚洲视频一区| 美女黄色片网站| 青青草综合视频| wwwwww欧美| 免费 成 人 黄 色| 无码人妻丰满熟妇区96|