摘要:,和自定義遍歷器依次打印注釋就是一個指針指針默認(rèn)在的位置沒有遍歷完的時候的值是遍歷完了就是意義提高具有遍歷接口數(shù)據(jù)的效率特點它用來訪問具有遍歷接口數(shù)據(jù)有一個方法指針,普通數(shù)組遍歷輸出。
Iterator、for..of,for...in和自定義遍歷器
Iterator:
var arr = [1,2,3,4,5]; var ite = arr[Symbol.iterator](); console.log(ite.next()); console.log(ite.next()); console.log(ite.next()); console.log(ite.next()); console.log(ite.next()); console.log(ite.next()); //依次打印:Object {value: 1, done: false}; Object {value: 2, done: false}; Object {value: 3, done: false}; Object {value: 4, done: false}; Object {value: 5, done: false}; Object {value: undefined, done: true}. 注釋:1.Iterator就是一個指針; 2.指針默認(rèn)在-1的位置; 3.沒有遍歷完的時候done的值是false,遍歷完了就是true; 4.意義:提高具有遍歷接口數(shù)據(jù)的效率; 5.特點:它用來訪問具有遍歷接口數(shù)據(jù),有一個next方法(指針).
for..of,for...in:
普通數(shù)組遍歷:
let arr = [1,2,3,4,5]; for(let item of arr){ console.log(item); } //輸出:1 2 3 4 5。
迭代器遍歷:
let iterator = arr[Symbol.iterator](); let result = iterator.next(); while(!result.done){ console.log(result.value); result=iterator.next(); } //輸出 1 2 3 4 5。
數(shù)組 Set Map
var s = new Set([1,2,3]); console.log(s);//打?。篠et(3) {1, 2, 3}; var itera = s[Symbol.iterator](); console.log(itera.next());//打印:Object {value: 1, done: false}; var m = new Map([["age",21],["sex","男"]]); m.set("name","宋澤"); console.log(m);//打?。篗ap(3) {"age" => 21, "sex" => "男", "name" => "宋澤"}; var i = m[Symbol.iterator](); console.log(i.next());//打印:Object {value: Array(2), done: false}; let obj = {x:1,y:2,z:3}; let arr = ["a","b","c"]; for(let key in obj){ console.log(key);//打印:x y z; console.log(obj[key]);//打?。簒 1 y 1 z 1; } for(let key in arr){ console.log(key);//打?。簒 y z; console.log(arr[key]);//打?。簒 1 y 1 z 1; } 注釋:1.遍歷對象用forin,遍歷數(shù)組,Map,Set,類數(shù)組用for of。 2.for in可以遍歷對象,也可以遍歷數(shù)組.
自定義遍歷器:
var arr = [1,2,3,4,5]; function Iterator(arr){ let i = -1; //遍歷器默認(rèn)指在-1的位置; function next(){ //返回一個方法; i++; //當(dāng)next的時候,i向后移; let value; //聲明一個空的變量; let done = flase; //done的默認(rèn)值是沒有遍歷完成; if(i == arr.length){ //如果i等于數(shù)組的長度的時候,i就溢出了,所以value的值是undefined,done的值是true; value = undefined; done = true; }else{ //否則value的值就等于數(shù)組中的值; value=arr[i]; } return {value:value,done:done}; //返回兩個值,一個值是value,另一個值是done; } return {next:next}; //返回next方法; } var ite = arr[Symbol.iterator](); console.log(ite.next()); console.log(ite.next()); console.log(ite.next()); console.log(ite.next()); console.log(ite.next()); console.log(ite.next()); 依次打?。篛bject {value: 1, done: false}; Object {value: 2, done: false}; Object {value: 3, done: false}; Object {value: 4, done: false}; Object {value: 5, done: false}; Object {value: undefined, done: true}.
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/84104.html
摘要:由于中引入了許多數(shù)據(jù)結(jié)構(gòu)算上原有的包括等等數(shù)組需要一個東西來管理他們這就是遍歷器。數(shù)組默認(rèn)遍歷器遍歷值相當(dāng)于依次輸出依次輸出依次輸出依次輸出不難看出默認(rèn)得到值而只能得到索引。即遍歷器的本質(zhì)就是一個指針。 由于 ES6 中引入了許多數(shù)據(jù)結(jié)構(gòu), 算上原有的包括Object, Array, TypedArray, DataView, buffer, Map, WeakMap, Set, We...
摘要:有兩個協(xié)議可迭代協(xié)議和迭代器協(xié)議。為了變成可迭代對象,一個對象必須實現(xiàn)或者它原型鏈的某個對象必須有一個名字是的屬性迭代器協(xié)議該迭代器協(xié)議定義了一種標(biāo)準(zhǔn)的方式來產(chǎn)生一個有限或無限序列的值。 ECMAScript 2015的幾個補充,并不是新的內(nèi)置或語法,而是協(xié)議。這些協(xié)議可以被任何遵循某些約定的對象來實現(xiàn)。有兩個協(xié)議:可迭代協(xié)議和迭代器協(xié)議。 可迭代協(xié)議 可迭代協(xié)議允許 JavaScri...
摘要:文章內(nèi)容分兩部分前半部分為迭代器模式概念后半部分為中迭代器上半部分開始迭代器模式提供一種方法順序訪問一個聚合對象中的各個元素,而又不需要暴露該對象的內(nèi)部表示。下半部分開始的迭代器迭代器等同于遍歷器。執(zhí)行該函數(shù),會返回一個遍歷器對象。 showImg(https://segmentfault.com/img/bVbuyaZ?w=800&h=600); 文章內(nèi)容分兩部分: 前半部分為 迭...
摘要:本文從使用對數(shù)組進(jìn)行遍歷開始說起,粗略對比使用進(jìn)行遍歷的差異,并由此引入中可迭代對象迭代器的概念,并對其進(jìn)行粗略介紹。說到這里,就繼續(xù)說一下迭代器關(guān)閉的情況了。確實,符合可迭代協(xié)議和迭代器協(xié)議的。 本文從使用 forEach 對數(shù)組進(jìn)行遍歷開始說起,粗略對比使用 forEach , for...in , for...of 進(jìn)行遍歷的差異,并由此引入 ES6 中 可迭代對象/迭代器 的概...
摘要:數(shù)據(jù)的層級意味著迭代數(shù)據(jù)結(jié)構(gòu)并提取它的數(shù)據(jù)。對于技術(shù)人而言技是單兵作戰(zhàn)能力,術(shù)則是運用能力的方法。在前端娛樂圈,我想成為一名出色的人民藝術(shù)家。 聊聊 for of 說起 for of 相信每個寫過 JavaScript 的人都用過 for of ,平時我們用它做什么呢?大多數(shù)情況應(yīng)該就是遍歷數(shù)組了,當(dāng)然,更多時候,我們也會用 map() 或者 filer() 來遍歷一個數(shù)組。 但是就...
閱讀 2478·2021-11-16 11:52
閱讀 2401·2021-11-11 16:55
閱讀 834·2021-09-02 15:41
閱讀 3057·2019-08-30 15:54
閱讀 3220·2019-08-30 15:54
閱讀 2324·2019-08-29 15:39
閱讀 1631·2019-08-29 15:18
閱讀 1053·2019-08-29 13:00