亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

for ...of 與 for... in

lijinke666 / 2138人閱讀

摘要:也就是說(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)
-不支持IE瀏覽器(IE9以下的)
-遍歷的順序可能不是實(shí)際的內(nèi)部順序(先遍歷出整數(shù)屬性,按照升序),然后其他屬性按照創(chuàng)建時(shí)的順序遍歷出來(lái)
-for in會(huì)遍歷數(shù)組所有的可枚舉屬性,包括原型中存在的屬性(object.prototype添加的屬性)
-for in一般用于遍歷對(duì)象屬性
-for in無(wú)返回值
-Symbol 作為屬性名,該屬性不會(huì)出現(xiàn)在for...in、循環(huá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):

-for of其實(shí)遍歷的是對(duì)象的Symbol.iterator屬性,而對(duì)象沒有該屬性
-不會(huì)遍歷到對(duì)象屬性和原型屬性
-如果要遍歷對(duì)象,可與Object.keys()配合使用
-配合Object.entries() 輸出數(shù)組索引和元素值/對(duì)象的屬性和屬性值,但Symbol()屬性會(huì)忽略
-配合Object.values() 輸出數(shù)組元素值/對(duì)象屬性值,
-一般用于遍歷數(shù)組或者偽數(shù)組
-無(wú)返回值
-Symbol 作為屬性名,該屬性不會(huì)出現(xiàn)在for...in、for...of循環(huán)中,也不會(huì)被Object.keys()、Object.getOwnPropertyNames()、JSON.stringify()返回

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

相關(guān)文章

  • JavaScript 的 4 種數(shù)組遍歷方法: for VS forEach() VS for/in

    摘要:對(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ù)組或者...

    joyqi 評(píng)論0 收藏0
  • 我們不一樣:for...offor...in

    摘要:定義兩者都是遍歷的方法,最先能想到的區(qū)別是,前者是遍歷鍵名,后者是遍歷鍵值。一種數(shù)據(jù)結(jié)構(gòu)只要部署了接口,就稱之為可遍歷的。中提供了一些具備原生接口的數(shù)據(jù)結(jié)構(gòu)包括函數(shù)的對(duì)象對(duì)象。 定義 兩者都是遍歷的方法,最先能想到的區(qū)別是,前者是遍歷鍵名,后者是遍歷鍵值??匆幌聝烧叩亩x: for...in 遍歷當(dāng)前對(duì)象的所有可枚舉屬性(包括自有屬性,從原型繼承的屬性),遍歷順序是無(wú)序的 for.....

    Imfan 評(píng)論0 收藏0
  • 【快速入門系列】簡(jiǎn)述 for...infor...of 區(qū)別

    摘要:像和使用內(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)研究研究。 一...

    ashe 評(píng)論0 收藏0
  • 2018 AI、機(jī)器學(xué)習(xí)、深度學(xué)習(xí) Tensorflow 相關(guān)優(yōu)秀書籍、課程、示例鏈接集錦

    摘要:機(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...

    wenshi11019 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<