国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

for ...of 與 for... in

lijinke666 / 2076人閱讀

摘要:也就是說,遍歷器對象本質上,就是一個指針對象。規定,默認的接口部署在數據結構的屬性,或者說,一個數據結構只要具有屬性,就可以認為是可遍歷的屬性本身是一個函數,就是當前數據結構默認的遍歷器生成函數。執行這個函數,就會返回一個遍歷器。

for...in遍歷對象的屬性或數組索引(ES5)

eg1:遍歷數組

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:遍歷對象

      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:遍歷對象的順序

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的要點
-不支持IE瀏覽器(IE9以下的)
-遍歷的順序可能不是實際的內部順序(先遍歷出整數屬性,按照升序),然后其他屬性按照創建時的順序遍歷出來
-for in會遍歷數組所有的可枚舉屬性,包括原型中存在的屬性(object.prototype添加的屬性)
-for in一般用于遍歷對象屬性
-for in無返回值
-Symbol 作為屬性名,該屬性不會出現在for...in、循環中

for...of可遍歷數組,Set,Map,類數組對象(eg:arguments,DOM NodeList對象,字符串)(ES6)不能遍歷對象

eg1:遍歷數組

 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:遍歷對象

 var obj={
            "49":"A",
            "a":"tt",
            "5":false,
            "1":"ss",
        }
        for(let key of obj){//報錯
            console.log(index);
        } 

eg3:for of與Object.keys()遍歷對象

 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()遍歷數組索引

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的要點:

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

Iterator(遍歷器)與for...of

遍歷器(Iterator) 它是一種接口,為各種不同的數據結構(Array,Object,Set,Map)提供統一的訪問機制。任何數據結構只要部署 Iterator 接口,就可以完成遍歷操作(即依次處理該數據結構的所有成員)。

Iterator 的作用

一是為各種數據結構,提供訪問接口;二是使得數據結構的成員能夠按某種次序排列;三是 ES6 創造了一種新的遍歷命令for...of循環,當使用for...of循環遍歷某種數據結構時,該循環會自動去尋找 Iterator 接口。

Iterator 的遍歷過程

創建一個指針對象,指向當前數據結構的起始位置。也就是說,遍歷器對象本質上,就是一個指針對象。

第一次調用指針對象的next方法,可以將指針指向數據結構的第一個成員。

第二次調用指針對象的next方法,指針就指向數據結構的第二個成員。

不斷調用指針對象的next方法,直到它指向數據結構的結束位置。每一次調用next方法,都會返回數據結構的當前成員的信息。具體來說,就是返回一個包含value和done兩個屬性的對象。其中,value屬性是當前成員的值,done屬性是一個布爾值,表示遍歷是否結束。

ES6 規定,默認的 Iterator 接口部署在數據結構的Symbol.iterator屬性,或者說,一個數據結構只要具有Symbol.iterator屬性,就可以認為是“可遍歷的”Symbol.iterator屬性本身是一個函數,就是當前數據結構默認的遍歷器生成函數。執行這個函數,就會返回一個遍歷器。

原生具備 Iterator 接口的數據結構

Array

Map

Set

String

TypedArray

函數的 arguments 對象

NodeList 對象

對象(Object)之所以沒有默認部署 Iterator 接口,是因為對象的哪個屬性先遍歷,哪個屬性后遍歷是不確定的,需要開發者手動指定。

會默認調用 Iterator 接口場合

解構賦值

擴展運算符

yield*

for...of

Array.from()

Map()

Set()

WeakMap()

WeakSet()(比如new Map([["a",1],["b",2]]))

Promise.all()

Promise.race()

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/109474.html

相關文章

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

    摘要:對于,除非使用箭頭函數,它的回調函數的將會變化。使用測試下面的代碼,結果如下打印打印要點使用的規則要求所有回調函數必須使用箭頭函數。 譯者按: JS 騷操作。 原文:For vs forEach() vs for/in vs for/of in JavaScript 譯者: Fundebug 本文采用意譯,版權歸原作者所有 我們有多種方法來遍歷 JavaScript 的數組或者...

    joyqi 評論0 收藏0
  • 我們不一樣:for...offor...in

    摘要:定義兩者都是遍歷的方法,最先能想到的區別是,前者是遍歷鍵名,后者是遍歷鍵值。一種數據結構只要部署了接口,就稱之為可遍歷的。中提供了一些具備原生接口的數據結構包括函數的對象對象。 定義 兩者都是遍歷的方法,最先能想到的區別是,前者是遍歷鍵名,后者是遍歷鍵值。看一下兩者的定義: for...in 遍歷當前對象的所有可枚舉屬性(包括自有屬性,從原型繼承的屬性),遍歷順序是無序的 for.....

    Imfan 評論0 收藏0
  • 【快速入門系列】簡述 for...infor...of 區別

    摘要:像和使用內置構造函數所創建的對象都會繼承自和的不可枚舉屬性,例如的方法或的方法。循環將遍歷對象本身的所有可枚舉屬性,以及對象從其構造函數原型中繼承的屬性更接近原型鏈中對象的屬性覆蓋原型屬性。遍歷數組時推薦使用,其中為數組每一項的值。 引言 在對數組或對象進行遍歷時,我們經常會使用到兩種方法:for...in 和 for...of,那么這兩種方法之間的區別是什么呢?讓我們來研究研究。 一...

    ashe 評論0 收藏0
  • 2018 AI、機器學習、深度學習 Tensorflow 相關優秀書籍、課程、示例鏈接集錦

    摘要:機器學習深度學習與自然語言處理領域推薦的書籍列表人工智能深度學習與相關書籍課程示例列表是筆者系列的一部分對于其他的資料集錦模型開源工具與框架請參考。 showImg(https://segmentfault.com/img/remote/1460000014946199); DataScienceAI Book Links | 機器學習、深度學習與自然語言處理領域推薦的書籍列表 sho...

    wenshi11019 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<