JS循環(huán)大總結(jié), for, forEach,for in敏晤,for of, map區(qū)別
map(數(shù)組方法):
特性:
map不改變原數(shù)組但是會 返回新數(shù)組
可以使用break中斷循環(huán)睁枕,可以使用return返回到外層函數(shù)
實例:
let newarr=arr.map(i=>{
return i+=1;
console.log(i);
})
console.log(arr)//1,3,4---不會改變原數(shù)組
console.log(newarr)//[2,4,5]---返回新數(shù)組
forEach(數(shù)組方法):
特性:
便利的時候更加簡潔,效率和for循環(huán)相同畅铭,不用關(guān)心集合下標的問題,減少了出錯的概率勃蜘。
沒有返回值
不能使用break中斷循環(huán)硕噩,不能使用return返回到外層函數(shù)
實例:
let newarr=arr.forEach(i=>{
i+=1;
console.log(i);//2,4,5
})
console.log(arr)//[1,3,4]
console.log(newarr)//undefined
注意:
forEach() 對于空數(shù)組是不會執(zhí)行回調(diào)函數(shù)的。
for可以用continue跳過循環(huán)中的一個迭代缭贡,forEach用continue會報錯炉擅。
forEach() 需要用 return 跳過循環(huán)中的一個迭代,跳過之后會執(zhí)行下一個迭代阳惹。
for in(大部分用于對象):
用于循環(huán)遍歷數(shù)組或?qū)ο髮傩?/p>
特性:
可以遍歷數(shù)組的鍵名谍失,遍歷對象簡潔方便 ###實例:
? let person={name:"小白",age:28,city:"北京"}
? let text=""
? for (let i in person){
? ? ? text+=person[i]
? }
? 輸出結(jié)果為:小白28北京
//其次在嘗試一些數(shù)組
? let arry=[1,2,3,4,5]
? for (let i in arry){
? ? ? ? console.log(arry[i])
? ? }
//能輸出出來,證明也是可以的
for of(不能遍歷對象):
特性:
(可遍歷map莹汤,object,array,set string等)用來遍歷數(shù)據(jù)快鱼,比如組中的值
避免了for in的所有缺點,可以使用break,continue和return,不僅支持數(shù)組的遍歷抹竹,還可以遍歷類似數(shù)組的對象线罕。
? let arr=["nick","freddy","mike","james"];
? ? for (let item of arr){
? ? ? ? console.log(item)
? ? }
//暑促結(jié)果為nice freddy mike james
//遍歷對象
? let person={name:"老王",age:23,city:"唐山"}
? for (let item of person){
? ? ? ? console.log(item)
? ? }
//我們發(fā)現(xiàn)它是不可以的
//但是它和forEach有個解決方法,結(jié)尾介紹
總結(jié):
forEach 遍歷列表值,不能使用 break 語句或使用 return 語句
for in 遍歷對象鍵值(key),或者數(shù)組下標,不推薦循環(huán)一個數(shù)組
for of 遍歷列表值,允許遍歷 Arrays(數(shù)組), Strings(字符串), Maps(映射), Sets(集合)等可迭代的數(shù)據(jù)結(jié)構(gòu)等.在 ES6 中引入的 for of 循環(huán)窃判,以替代 for in 和 forEach() 钞楼,并支持新的迭代協(xié)議。
for in循環(huán)出的是key袄琳,for of循環(huán)出的是value询件;
for of是ES6新引入的特性。修復(fù)了ES5的for in的不足唆樊;
for of不能循環(huán)普通的對象宛琅,需要通過和Object.keys()搭配使用。