Skip to content

JavaScript 遍历

for 遍历的 四个 方法

for、for in、for of、foreach

直接遍历 字符串 的方法有(两个):for、for of

直接遍历 对象 的方法有(一个):for in (只有 for in)

直接遍历 数组 的方法有(三个):for、for of、forEach (除了 for in)

转数组再遍历 对象 的方法:Object.entries(obj)、Object.keys(obj)、Object.values(obj).forEach()

for 遍历优缺点

for 循环

shell
优点:灵活,性能最佳,可以使用 break-终止循环 continue-跳过当前继续 控制流程
缺点:语法复杂
场景:遍历普通数组、字符串

for in

shell
优点:遍历对象可枚举的属性(包括原型链上的)
缺点:需要额外的 hasOwnProperty 检查来过滤原型属性
场景:只遍历对象

for of

shell
优点:遍历可迭代对象,可以使用 break continue
缺点:无索引,不能直接用于普通对象
场景:遍历数组、字符串、Map、Set、类数组、arguments、NodeList、generator 函数返回值

forEach

shell
优点:遍历部分迭代对象,函数式写法
缺点:无法使用 break continue(必须抛出异常或使用 return 模拟),无法遍历字符串
场景:遍历数组、Map, Set,类数组(NodeList,结合Array.from()遍历 arguments)

for 遍历总结

需要最高性能或精细控制:使用 for 循环

直接遍历对象属性:for...in(配合 hasOwnProperty)

遍历数组元素:for...of

函数式风格处理数组:forEach/map/filter/reduce

需要提前终止循环:避免 forEach,推荐使用 for/for...of

非 for 循环

特点:for 遍历是已经确定了循环次数,while 在不确定循环次数时也可用

while 循环:只有满足条件才会执行,不满足条件会终止,内部通常配合 i++ 来使用

do...while 循环:同上,只是需要先执行一次再判断

为何for比forEach快

for 是基于数组索引直接遍历计算,forEach 循环则是一种迭代器,对数组中的每个元素都创建一次回调函数,函数的创建也需要耗时