javascript中for...of和for..in循環(huán)的區(qū)別
for…in可以用來(lái)干什么
(1)for…in最好用來(lái)遍歷對(duì)象,但也可以遍歷數(shù)組(有缺陷)
(2)for…in遍歷的是key-value中的key值
我們先看怎么使用for…in遍歷對(duì)象
const obj = { ?? ?a:1, ?? ?b:2, ?? ?c:3 } for( var o in obj){ ?? ?console.log(o); // 遍歷出來(lái)的是對(duì)象中的屬性,a,b,c ?? ?console.log(obj[o]); // 遍歷出來(lái)的是對(duì)象中屬性各自對(duì)應(yīng)的值1,2,3 }
需要注意的是,使用for…in遍歷對(duì)象時(shí),不僅會(huì)把對(duì)象上的屬性遍歷出來(lái),還會(huì)把對(duì)象原型鏈上的可枚舉的屬性遍歷出來(lái)
再看看for…in遍歷數(shù)組能不能成功
const arr = [1,2,3,4,5] for(var a in arr){ console.log(a); // 輸出的是數(shù)組索引 console.log(arr[a]); // 輸出的是數(shù)組索引對(duì)應(yīng)的值 }
結(jié)果是成功的,但又為什么說(shuō)最好不要用for…in遍歷數(shù)組呢?
(1)for…in遍歷出的數(shù)組索引為字符串型數(shù)字,不能直接進(jìn)行幾何運(yùn)算
(2)遍歷的順序可能不是按照實(shí)際數(shù)組的內(nèi)部順序
(3)使用for…in會(huì)遍歷所有的可枚舉屬性,包括原型
for…of能用來(lái)做什么
(1)for…of可以用來(lái)遍歷數(shù)/數(shù)組/字符串/map/set等擁有迭代器對(duì)象的集合
(2)for…of遍歷出來(lái)的是key-value中的value值
// 遍歷數(shù)組 var arr = [1,2,3,4,3,5,7]; for (let i of arr){ ?? ?console.log(i); } // 遍歷字符串 var str = 'hello' for (let s of str){ ?? ?console.log(s);? } // 遍歷set集合 const set = new Set([1,2,3,4]) for (let s of set){ ?? ?console.log(s); }
補(bǔ)充:
(1)for…of不能用來(lái)遍歷對(duì)象,因?yàn)槠胀▽?duì)象中沒(méi)有迭代器對(duì)象
(2)與forEach()不同的是,for…of可以使用break,continue,return等語(yǔ)句
總結(jié)下來(lái)就是:
(1)在遍歷對(duì)象時(shí)用for…in,在遍歷數(shù)組時(shí)用for…of
(2)for…in遍歷出的是key,for…of遍歷出的結(jié)果是value。
也就是說(shuō)遍歷數(shù)組時(shí),for…in遍歷的是數(shù)組的索引,for…of遍歷的是數(shù)組的元素值。
到此這篇關(guān)于javascript中for...of和for..in循環(huán)的區(qū)別的文章就介紹到這了,更多相關(guān)javascript for...of和for..in內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ExtJs的Ext.Ajax.request實(shí)現(xiàn)waitMsg等待提示效果
這篇文章主要介紹了ExtJs的Ext.Ajax.request實(shí)現(xiàn)waitMsg等待提示效果,需要的朋友可以參考下2017-06-06Javascript正則控制文本框只能輸入整數(shù)或浮點(diǎn)數(shù)
這篇文章主要介紹Javascript正則如何控制文本框只能輸入整數(shù)或浮點(diǎn)數(shù),需要的朋友可以參考下2014-09-09javascript html5 canvas實(shí)現(xiàn)可拖動(dòng)省份的中國(guó)地圖
這篇文章主要介紹了javascript html5 canvas實(shí)現(xiàn)可拖動(dòng)省份的中國(guó)地圖的相關(guān)資料,需要的朋友可以參考下2016-03-03JS面向?qū)ο髮?shí)現(xiàn)飛機(jī)大戰(zhàn)
這篇文章主要為大家詳細(xì)介紹了JS面向?qū)ο髮?shí)現(xiàn)飛機(jī)大戰(zhàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08javascript簡(jiǎn)單鏈?zhǔn)秸{(diào)用案例分析
這篇文章主要介紹了javascript簡(jiǎn)單鏈?zhǔn)秸{(diào)用,結(jié)合具體實(shí)例形式模擬jQuery分析了鏈?zhǔn)秸{(diào)用的原理與具體實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-05-05js實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制文本功能
這篇文章主要為大家詳細(xì)介紹了原生js實(shí)現(xiàn)點(diǎn)擊按鈕復(fù)制文本的相關(guān)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04