摘要:如上圖所示,本文主要闡述了的四種迭代器,,和的功能和區(qū)別動態(tài)數(shù)組每次遍歷開始時都會重新計算一次數(shù)組的長度稀疏數(shù)組不會跳過無效數(shù)組動態(tài)數(shù)組與一樣,會遍歷到新增加的元素稀疏數(shù)組也不會跳過無效數(shù)組特點(diǎn)可以遍歷字符串可以遍歷類數(shù)組對象對象可
如上圖所示,本文主要闡述了Array的四種迭代器 for,for-of,for-in 和 for-each的功能和區(qū)別
for動態(tài)數(shù)組:每次遍歷開始時都會重新計算一次數(shù)組的長度
稀疏數(shù)組:不會跳過無效數(shù)組
for-of動態(tài)數(shù)組:與for一樣,會遍歷到新增加的元素
稀疏數(shù)組:也不會跳過無效數(shù)組
特點(diǎn):
1、可以遍歷字符串
2、可以遍歷類數(shù)組對象:DOM;NodeList對象
3、可以遍歷數(shù)組中的值
4、可以遍歷set,map對象
注釋:
set
定義:用來不重復(fù)的存儲任何數(shù)據(jù)類型的對象,不管是基本的數(shù)據(jù)類型還是對象
使用 new Set(array)
map:
定義:用來存儲鍵值對象的數(shù)據(jù)
使用: new Map([iterable])參數(shù)是一個數(shù)組或者是由鍵值對組成的可遍歷對象
測試
/**可以遍歷字符串 */ const strTarget = "hello"; for(item of strTarget){ console.log(item); }
結(jié)果:
/**遍歷DOM元素*/ const pdom = document.getElementsByTagName("p"); for( item of pdom){ console.log(item); }
結(jié)果:
/**遍歷數(shù)組中的值 */ const arr = ["liumin","qijun","fengjian","lala"]; for(item of arr){ console.log(item); }
結(jié)果:
/**遍歷set和map中的值 */ const setObj = new Set([1,2,2,3,5,6]); for(value of setObj){ console.log(value); } const mapObj = new Map([["a",1],["b",2]]); for([key, value] of mapObj){ console.log(`${key}----${value}`); }
遍歷set的輸出值:
遍歷map的輸出值:
動態(tài)數(shù)組:不會遍歷到新增加的元素
稀疏數(shù)組:會跳過無效數(shù)組
特點(diǎn):不能用break和return來中斷循環(huán)
for-in動態(tài)數(shù)組:不會遍歷到新增加的元素
稀疏數(shù)組:會跳過無效數(shù)組
特點(diǎn):
1、for-in是為對象的遍歷而設(shè)計的,index不是實(shí)際數(shù)字,而是鍵字符串,與Object.keys()方法類似
2、給數(shù)組額外定義一個屬性,會遍歷到這個屬性和值
3、遍歷順序有時也是隨機(jī)的
4、數(shù)組原型鏈上的屬性也會被訪問到
給數(shù)組額外定義一個屬性,for-in會遍歷到這個屬性值,forEach,for-of,for都不會遍歷到這個屬性值
測試
const anotherArr = ["huang", "lala", "baba"]; const array = ["iumin", "huahua", "jianjian"]; array.another = anotherArr; console.log("----for-in----"); for(let index in array){ console.log(`${index}---${array[index]}`); } console.log("----for-of---"); for(let value of array){ console.log(value); } console.log("----forEach----"); array.forEach((value) => { console.log(value); }) console.log("----for-----"); const arLenght = array.length; for(let i=0 ; i稀疏數(shù)組
由圖可以看出除了for-in其他三個都不會遍歷到數(shù)組額外定義的屬性for-in和forEach會跳過無效數(shù)組
測試const arr = []; arr[0] = 0; arr[100] = 100; arr[1000] = 1000; for(info in arr){ console.log("arr["+info+"] = "+arr[info]); } arr.forEach((value) => { console.log(value); })
由結(jié)果可以看出,for-in 和 foreach 只能輸出賦過值的元素,沒有賦過值的元素將不會輸出來
for 和 for-of是不會跳過無效數(shù)組的const arr = []; arr[0] = 0; arr[100] = 100; arr[1000] = 1000; for(let info of arr){ console.log(info); } for(let i=0; i這兩個的輸出結(jié)果是一樣的:
動態(tài)數(shù)組
可以看出把沒有賦值的元素也輸出出來了for-of 和 for 可以遍歷到新增加的元素
測試(以for-of為例):const arr = ["liumin","huahua","jianjian"]; for(item of arr){ if(item === "jianjian"){ arr.push("hello"); } console.log(item); }輸出結(jié)果:
for的輸出結(jié)果與上述一致for-in 和 forEach 不可以遍歷到新增加的元素
測試(以 for-in為例):const arr = ["liumin","huahua","jianjian"]; for(item in arr){ if(item === 2){ arr.push("hello"); } console.log(arr[item]); }輸出結(jié)果:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/93139.html
摘要:什么是可迭代對象可迭代對象具有屬性是一個方法的返回值是一個迭代器結(jié)合以上第二點(diǎn)和第三點(diǎn),可以得出就是一個生成器所以我們可以給出一個可迭代對象的明確定義就是一個具有屬性,且其為一個生成器的對象,就是可迭代對象。 1: 什么是可迭代對象? 1: 可迭代對象具有Symbol.iterator屬性 2: Symbol.iterator是一個方法 3: Symbol.iterator的返回值是一...
摘要:簡單介紹下規(guī)范里面迭代器相關(guān)的概念。接口指定迭代器對象必須實(shí)現(xiàn)一個方法,如下示例偽代碼。方法是否接受參數(shù),在規(guī)范中并不嚴(yán)格限定,取決于實(shí)現(xiàn)當(dāng)前這個迭代器的對象。表示迭代終結(jié),后續(xù)再調(diào)用當(dāng)前迭代器的方法,返回的對象一律為。 簡單介紹下 ES6 規(guī)范里面迭代器(Iterator)相關(guān)的概念。最近為啥會看到迭代器,是因?yàn)榭戳?fetch 相關(guān)的 Headers 接口,為了實(shí)現(xiàn)下 Header...
摘要:將數(shù)組或者集合中的全部或者一部數(shù)據(jù)取出來,用迭代器比較方便迭代器能陸續(xù)遍歷幾個迭代器按順序迭代訪問幾個不同的迭代器。 一、SPL簡介 ?????什么是SPL PHP的標(biāo)準(zhǔn)庫SPL:Standard PHP Library ?????SPL: 用于解決常見普遍問題的一組接口與類的集合 ?????Common Problem: 數(shù)學(xué)建模/數(shù)據(jù)結(jié)構(gòu) 解決數(shù)據(jù)怎么存儲的問題 元素遍歷 ...
摘要:本文從使用對數(shù)組進(jìn)行遍歷開始說起,粗略對比使用進(jìn)行遍歷的差異,并由此引入中可迭代對象迭代器的概念,并對其進(jìn)行粗略介紹。說到這里,就繼續(xù)說一下迭代器關(guān)閉的情況了。確實(shí),符合可迭代協(xié)議和迭代器協(xié)議的。 本文從使用 forEach 對數(shù)組進(jìn)行遍歷開始說起,粗略對比使用 forEach , for...in , for...of 進(jìn)行遍歷的差異,并由此引入 ES6 中 可迭代對象/迭代器 的概...
摘要:迭代器模式迭代器模式是指提供一種方法順序訪問一個聚合對象中的各個元素,而不需要暴露該對象的內(nèi)部表示。可迭代協(xié)議和迭代器協(xié)議。生成器函數(shù)是可以作為迭代器工廠的函數(shù),當(dāng)它被執(zhí)行時會返回一個新的對象,該對象符合可迭代協(xié)議和迭代器協(xié)議。 迭代器模式 迭代器模式是指提供一種方法順序訪問一個聚合對象中的各個元素,而不需要暴露該對象的內(nèi)部表示。 迭代器分為內(nèi)部迭代器和外部迭代器。內(nèi)部迭代器只需一次初...
摘要:我們將從概念上理解迭代器是什么,以及在何處使用它們和示例。同時返回一個名為迭代器的對象,這個迭代器將擁有一個名為的方法,該方法將返回一個具有鍵值為和的對象。下圖可以幫助建立可迭代對象迭代器和之間的關(guān)系,這種關(guān)系稱為迭代協(xié)議。 showImg(https://segmentfault.com/img/bVbkk18?w=1000&h=562); 我們將在本文中分析迭代器。迭代器是在Jav...
閱讀 2897·2021-11-15 11:39
閱讀 1520·2021-08-19 10:56
閱讀 1097·2019-08-30 14:12
閱讀 3740·2019-08-29 17:29
閱讀 723·2019-08-29 16:21
閱讀 3425·2019-08-26 12:22
閱讀 1519·2019-08-23 16:30
閱讀 1024·2019-08-23 15:25