摘要:也就是說(shuō),遍歷器對(duì)象本質(zhì)上,就是一個(gè)指針對(duì)象。規(guī)定,默認(rèn)的接口部署在數(shù)據(jù)結(jié)構(gòu)的屬性,或者說(shuō),一個(gè)數(shù)據(jù)結(jié)構(gòu)只要具有屬性,就可以認(rèn)為是可遍歷的屬性本身是一個(gè)函數(shù),就是當(dāng)前數(shù)據(jù)結(jié)構(gòu)默認(rèn)的遍歷器生成函數(shù)。執(zhí)行這個(gè)函數(shù),就會(huì)返回一個(gè)遍歷器。
for...in遍歷對(duì)象的屬性或數(shù)組索引(ES5)
eg1:遍歷數(shù)組
var arr=["a","b","c","d"]; for(let index in arr){ console.log(index);// 0 1 2 3 console.log(arr[index]);// a b c d }
eg2:遍歷對(duì)象
var obj={ name:"Jin", age:11, [Symbol()]:123, } for(let index in obj){ console.log(index);//name age console.log(obj[index]);//Jin 11 }
eg3:遍歷對(duì)象的順序
var obj={ "49":"A", "a":"tt", "5":false, "1":"ss", } for(let index in obj){ console.log(index);//1 5 49 a console.log(obj[index])//ss false A tt }for...in的要點(diǎn):
for...of可遍歷數(shù)組,Set,Map,類數(shù)組對(duì)象(eg:arguments,DOM NodeList對(duì)象,字符串)(ES6)不能遍歷對(duì)象
eg1:遍歷數(shù)組
var arr=["a","b","c","d"]; for(let key of arr){ console.log(key);// a b c d console.log(arr[key]); //undefined undefined undefined undefined }
eg2:遍歷對(duì)象
var obj={ "49":"A", "a":"tt", "5":false, "1":"ss", } for(let key of obj){//報(bào)錯(cuò) console.log(index); }
eg3:for of與Object.keys()遍歷對(duì)象
var obj={ name:"Jin", age:11, } for(let value of Object.keys(obj)){ console.log(value);//name age console.log(obj[value]);//Jin 11 }
eg4:for of與Object.keys()遍歷數(shù)組索引
var arr=["a","b","c"]; for(let value of Object.keys(arr)){ console.log(value);//0 1 2 console.log(arr[value]);// a b c }
eg4:for of與Object.entries()遍歷索引和值
var arr=["a","b","c"]; for(let [index,value] of Object.entries(arr)){ console.log(index);//0 1 2 console.log(value);//a b c console.log(arr[index]);//a b c }
eg5:for of與Object.values()遍歷屬性值
var arr=["a","b","c"]; for(let [index,value] of Object.values(arr)){ console.log(index);//a b c console.log(value);//undefined undefined undefined console.log(arr[index]);//undefined undefined undefined }
for...of的要點(diǎn):
Iterator(遍歷器)與for...of
遍歷器(Iterator) 它是一種接口,為各種不同的數(shù)據(jù)結(jié)構(gòu)(Array,Object,Set,Map)提供統(tǒng)一的訪問機(jī)制。任何數(shù)據(jù)結(jié)構(gòu)只要部署 Iterator 接口,就可以完成遍歷操作(即依次處理該數(shù)據(jù)結(jié)構(gòu)的所有成員)。
Iterator 的作用
一是為各種數(shù)據(jù)結(jié)構(gòu),提供訪問接口;二是使得數(shù)據(jù)結(jié)構(gòu)的成員能夠按某種次序排列;三是 ES6 創(chuàng)造了一種新的遍歷命令for...of循環(huán),當(dāng)使用for...of循環(huán)遍歷某種數(shù)據(jù)結(jié)構(gòu)時(shí),該循環(huán)會(huì)自動(dòng)去尋找 Iterator 接口。
Iterator 的遍歷過(guò)程
創(chuàng)建一個(gè)指針對(duì)象,指向當(dāng)前數(shù)據(jù)結(jié)構(gòu)的起始位置。也就是說(shuō),遍歷器對(duì)象本質(zhì)上,就是一個(gè)指針對(duì)象。
第一次調(diào)用指針對(duì)象的next方法,可以將指針指向數(shù)據(jù)結(jié)構(gòu)的第一個(gè)成員。
第二次調(diào)用指針對(duì)象的next方法,指針就指向數(shù)據(jù)結(jié)構(gòu)的第二個(gè)成員。
不斷調(diào)用指針對(duì)象的next方法,直到它指向數(shù)據(jù)結(jié)構(gòu)的結(jié)束位置。每一次調(diào)用next方法,都會(huì)返回?cái)?shù)據(jù)結(jié)構(gòu)的當(dāng)前成員的信息。具體來(lái)說(shuō),就是返回一個(gè)包含value和done兩個(gè)屬性的對(duì)象。其中,value屬性是當(dāng)前成員的值,done屬性是一個(gè)布爾值,表示遍歷是否結(jié)束。
ES6 規(guī)定,默認(rèn)的 Iterator 接口部署在數(shù)據(jù)結(jié)構(gòu)的Symbol.iterator屬性,或者說(shuō),一個(gè)數(shù)據(jù)結(jié)構(gòu)只要具有Symbol.iterator屬性,就可以認(rèn)為是“可遍歷的”Symbol.iterator屬性本身是一個(gè)函數(shù),就是當(dāng)前數(shù)據(jù)結(jié)構(gòu)默認(rèn)的遍歷器生成函數(shù)。執(zhí)行這個(gè)函數(shù),就會(huì)返回一個(gè)遍歷器。
原生具備 Iterator 接口的數(shù)據(jù)結(jié)構(gòu)
Array
Map
Set
String
TypedArray
函數(shù)的 arguments 對(duì)象
NodeList 對(duì)象
對(duì)象(Object)之所以沒有默認(rèn)部署 Iterator 接口,是因?yàn)閷?duì)象的哪個(gè)屬性先遍歷,哪個(gè)屬性后遍歷是不確定的,需要開發(fā)者手動(dòng)指定。
會(huì)默認(rèn)調(diào)用 Iterator 接口場(chǎng)合
解構(gòu)賦值
擴(kuò)展運(yùn)算符
yield*
for...of
Array.from()
Map()
Set()
WeakMap()
WeakSet()(比如new Map([["a",1],["b",2]]))
Promise.all()
Promise.race()
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/109474.html
摘要:對(duì)于,除非使用箭頭函數(shù),它的回調(diào)函數(shù)的將會(huì)變化。使用測(cè)試下面的代碼,結(jié)果如下打印打印要點(diǎn)使用的規(guī)則要求所有回調(diào)函數(shù)必須使用箭頭函數(shù)。 譯者按: JS 騷操作。 原文:For vs forEach() vs for/in vs for/of in JavaScript 譯者: Fundebug 本文采用意譯,版權(quán)歸原作者所有 我們有多種方法來(lái)遍歷 JavaScript 的數(shù)組或者...
摘要:定義兩者都是遍歷的方法,最先能想到的區(qū)別是,前者是遍歷鍵名,后者是遍歷鍵值。一種數(shù)據(jù)結(jié)構(gòu)只要部署了接口,就稱之為可遍歷的。中提供了一些具備原生接口的數(shù)據(jù)結(jié)構(gòu)包括函數(shù)的對(duì)象對(duì)象。 定義 兩者都是遍歷的方法,最先能想到的區(qū)別是,前者是遍歷鍵名,后者是遍歷鍵值??匆幌聝烧叩亩x: for...in 遍歷當(dāng)前對(duì)象的所有可枚舉屬性(包括自有屬性,從原型繼承的屬性),遍歷順序是無(wú)序的 for.....
摘要:像和使用內(nèi)置構(gòu)造函數(shù)所創(chuàng)建的對(duì)象都會(huì)繼承自和的不可枚舉屬性,例如的方法或的方法。循環(huán)將遍歷對(duì)象本身的所有可枚舉屬性,以及對(duì)象從其構(gòu)造函數(shù)原型中繼承的屬性更接近原型鏈中對(duì)象的屬性覆蓋原型屬性。遍歷數(shù)組時(shí)推薦使用,其中為數(shù)組每一項(xiàng)的值。 引言 在對(duì)數(shù)組或?qū)ο筮M(jìn)行遍歷時(shí),我們經(jīng)常會(huì)使用到兩種方法:for...in 和 for...of,那么這兩種方法之間的區(qū)別是什么呢?讓我們來(lái)研究研究。 一...
摘要:機(jī)器學(xué)習(xí)深度學(xué)習(xí)與自然語(yǔ)言處理領(lǐng)域推薦的書籍列表人工智能深度學(xué)習(xí)與相關(guān)書籍課程示例列表是筆者系列的一部分對(duì)于其他的資料集錦模型開源工具與框架請(qǐng)參考。 showImg(https://segmentfault.com/img/remote/1460000014946199); DataScienceAI Book Links | 機(jī)器學(xué)習(xí)、深度學(xué)習(xí)與自然語(yǔ)言處理領(lǐng)域推薦的書籍列表 sho...
閱讀 3604·2021-11-22 15:22
閱讀 3384·2019-08-30 15:54
閱讀 2777·2019-08-30 15:53
閱讀 980·2019-08-29 11:22
閱讀 3601·2019-08-29 11:14
閱讀 2139·2019-08-26 13:46
閱讀 2275·2019-08-26 13:24
閱讀 2342·2019-08-26 12:22