JS基本遍歷方法詳解
for
這大概是應(yīng)用最廣的循環(huán)語句了吧,簡單實(shí)用,且大多數(shù)時(shí)候性能還是在線的,唯一的缺點(diǎn)大概就是太普通,沒有特色,導(dǎo)致很多人現(xiàn)在不愿用它。
const array = [4, 7, 9, 2, 6]; for (const index = 0; index < array.length; index++) { const element = array[index]; console.log(element); } // 4, 7, 9, 2, 6
for...in
for...in
語句可以以任意順序遍歷一個(gè)對象的除 Symbol 以外的可枚舉屬性。
const temp = {name: "temp"}; function Apple() { this.color = 'red'; } Apple.prototype = temp; const obj = new Apple(); for (const prop in obj) { console.log(`obj.${ prop } = ${ obj[prop] }`); } // obj.color = red // obj.name = temp
如果你只要考慮對象本身的屬性,而不是它的原型,那么使用 getOwnPropertyNames()
或執(zhí)行 hasOwnProperty()
來確定某屬性是否是對象本身的屬性。
const temp = {name: "temp"}; function Apple() { this.color = 'red'; } Apple.prototype = temp; const obj = new Apple(); for (const prop in obj) { if (obj.hasOwnProperty(prop)) { console.log(`obj.${ prop } = ${ obj[prop] }`); } } // obj.color = red
當(dāng)然,也可以用來遍歷數(shù)組。
const arr = [1, 2, 3, 4, 5]; for (const key in arr) { console.log(key) } // 0,1,2,3,4
使用 for...in
可以遍歷數(shù)組,但是會(huì)存在以下問題:
index 索引為字符串型數(shù)字(注意,非數(shù)字),不能直接進(jìn)行幾何運(yùn)算。
遍歷順序有可能不是按照實(shí)際數(shù)組的內(nèi)部順序(可能按照隨機(jī)順序)。
所以一般不建議使用 for...in
來遍歷數(shù)組。
for...of
for...of
語句在可迭代對象(包括 Array,Map,Set,String,TypedArray,arguments 對象等等)上創(chuàng)建一個(gè)迭代循環(huán),調(diào)用自定義迭代鉤子,并為每個(gè)不同屬性的值執(zhí)行語句。
const array = ['a', 'b', 'c']; for (const element of array) { console.log(element); } // a // b // c
for...of
和 for...in
的區(qū)別:
for...in
語句以任意順序迭代對象的可枚舉屬性。for...of
語句遍歷可迭代對象定義要迭代的數(shù)據(jù)。
Object.prototype.objCustom = function () { }; Array.prototype.arrCustom = function () { }; let iterable = [3, 5, 7]; iterable.foo = 'hello'; for (const key in iterable) { console.log(key); // logs 0, 1, 2, "foo", "arrCustom", "objCustom" } // 0, 1, 2, "foo", "arrCustom", "objCustom" for (const key of iterable) { console.log(key); } // 3, 5, 7
使用 for...of
遍歷 Map 結(jié)構(gòu):
let nodes = new Map(); nodes.set("node1", "t1") .set("node2", "t2") .set("node3", "t3"); for (const [node, content] of nodes) { console.log(node, content); } // node1 t1 // node2 t2 // node3 t3
可以看出,使用 for...of
遍歷 Map 結(jié)構(gòu)還是挺方便的,推薦使用!
總結(jié)
- 如果普通 for 循環(huán)用膩了,推薦使用
for...of
來替代。 - 這三種循環(huán)都可以使用 break 關(guān)鍵字來終止循環(huán),也可以使用 continue 關(guān)鍵字來跳過本次循環(huán)。
for...of
循環(huán)的適用范圍最大。
以上就是JS基本遍歷方法的詳細(xì)內(nèi)容,更多關(guān)于JS遍歷方法的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
javascript 中設(shè)置window.location.href跳轉(zhuǎn)無效問題解決辦法
這篇文章主要介紹了javascript 中設(shè)置window.location.href跳轉(zhuǎn)無效問題解決辦法的相關(guān)資料,需要的朋友可以參考下2017-02-02uniapp實(shí)現(xiàn)審批流程的具體操作步驟
這篇文章主要介紹了uniapp實(shí)現(xiàn)審批流程的具體操作方法,實(shí)現(xiàn)思路大概是需要要定義一個(gè)變量,記錄當(dāng)前激活的步驟,通過數(shù)組的長度來循環(huán)數(shù)據(jù),如果有就采用3元一次進(jìn)行選擇,具體實(shí)現(xiàn)步驟跟隨小編一起看看吧2024-03-03Js如何使用ffmpeg進(jìn)行視頻剪輯和畫面截取等功能
在日常處理視頻文件時(shí)常常會(huì)用到視頻片段的截取功能,FFmpeg支持該功能,下面這篇文章主要給大家介紹了關(guān)于Js如何使用ffmpeg進(jìn)行視頻剪輯和畫面截取等功能的相關(guān)資料,需要的朋友可以參考下2024-04-04JavaScript裝飾器函數(shù)(Decorator)實(shí)例詳解
這篇文章主要介紹了JavaScript裝飾器函數(shù)(Decorator),結(jié)合實(shí)例形式分析了JavaScript裝飾器函數(shù)(Decorator)的功能、實(shí)現(xiàn)與使用方法,需要的朋友可以參考下2017-03-03微信小程序如何保證每個(gè)頁面都已經(jīng)登陸詳解
前段時(shí)間發(fā)布了一個(gè)微信小程序的簡單登錄,但遇到一個(gè)問題,怎么確保用戶每個(gè)頁面都已經(jīng)登陸了呢,這篇文章主要給大家介紹了關(guān)于微信小程序如何保證每個(gè)頁面都已經(jīng)登陸的相關(guān)資料,需要的朋友可以參考下2021-11-11vue/js實(shí)現(xiàn)頁面自動(dòng)往上滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了vue/js實(shí)現(xiàn)頁面自動(dòng)往上滑動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04JS實(shí)現(xiàn)關(guān)閉當(dāng)前頁而不彈出提示框的方法
這篇文章主要介紹了JS實(shí)現(xiàn)關(guān)閉當(dāng)前頁而不彈出提示框的方法,結(jié)合實(shí)例形式分析了JS操作頁面的打開、關(guān)閉及父頁面的關(guān)閉技巧,需要的朋友可以參考下2016-06-06javascript 對象數(shù)組根據(jù)對象object key的值排序
本文僅僅是實(shí)現(xiàn)了javascript 對象數(shù)組根據(jù)對象object key的值排序,算是對自己學(xué)習(xí)javascript這么久的一個(gè)小結(jié),希望大家能夠喜歡2015-03-03Bootstrap選項(xiàng)卡與Masonry插件的完美結(jié)合
這篇文章主要介紹了Bootstrap選項(xiàng)卡與Masonry插件的完美結(jié)合的相關(guān)資料,需要的朋友可以參考下2016-07-07JS中數(shù)組與對象相互轉(zhuǎn)換的實(shí)現(xiàn)方式
這篇文章主要介紹了JS中數(shù)組與對象相互轉(zhuǎn)換的實(shí)現(xiàn)方式,文章通過代碼示例講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-04-04