JS基本遍历方法

for

这大概是应用最广的循环语句了吧,简单实用,且大多数时候性能还是在线的,唯一的缺点大概就是太普通,没有特色,导致很多人现在不愿用它。

javascript 复制代码
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 语句可以以任意顺序遍历一个对象的除 Symbol 以外的可枚举属性。

javascript 复制代码
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() 或执行 hasOwnProperty() 来确定某属性是否是对象本身的属性。

javascript 复制代码
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

当然,也可以用来遍历数组。

javascript 复制代码
const arr = [1, 2, 3, 4, 5];
for (const key in arr) {
    console.log(key)
}
// 0,1,2,3,4

使用 for...in 可以遍历数组,但是会存在以下问题:

  1. index 索引为字符串型数字(注意,非数字),不能直接进行几何运算。

  2. 遍历顺序有可能不是按照实际数组的内部顺序(可能按照随机顺序)。

所以一般不建议使用 for...in 来遍历数组。

for...of

for...of 语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句。

javascript 复制代码
const array = ['a', 'b', 'c'];
for (const element of array) {
    console.log(element);
}

// a
// b
// c

for...offor...in 的区别:

  • for...in 语句以任意顺序迭代对象的可枚举属性

  • for...of 语句遍历可迭代对象定义要迭代的数据

javascript 复制代码
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 结构:

javascript 复制代码
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 结构还是挺方便的,推荐使用!

总结

  1. 如果普通 for 循环用腻了,推荐使用 for...of 来替代。
  2. 这三种循环都可以使用 break 关键字来终止循环,也可以使用 continue 关键字来跳过本次循环。
  3. for...of 循环的适用范围最大。
相关推荐
大怪v6 分钟前
【Virtual World 04】我们的目标,无限宇宙!!
前端·javascript·代码规范
蓝瑟3 小时前
告别重复造轮子!业务组件多场景复用实战指南
前端·javascript·设计模式
渴望成为python大神的前端小菜鸟4 小时前
浏览器及其他 面试题
前端·javascript·ajax·面试题·浏览器
1024肥宅4 小时前
手写 new 操作符和 instanceof:深入理解 JavaScript 对象创建与原型链检测
前端·javascript·ecmascript 6
soda_yo4 小时前
浅拷贝与深拷贝: 克隆一只哈基米
前端·javascript·面试
用户6600676685396 小时前
从“养猫”看懂JS面向对象:原型链与Class本质拆解
前端·javascript·面试
之恒君6 小时前
JavaScript 对象相等性判断详解
前端·javascript
掘金安东尼6 小时前
前端周刊第443期(2025年12月1日–12月7日)
前端·javascript
执携6 小时前
Vue Router (导航守卫)
前端·javascript·vue.js
火车叼位6 小时前
让 ast-grep 听你的:指定语言解析 Vue/TSX/JSX 全流程
前端·javascript·后端