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 循环的适用范围最大。
相关推荐
choke2334 分钟前
[特殊字符] Python 文件与路径操作
java·前端·javascript
wuhen_n1 小时前
JavaScript内置数据结构
开发语言·前端·javascript·数据结构
鹿心肺语1 小时前
前端HTML转PDF的两种主流方案深度解析
前端·javascript
一个懒人懒人2 小时前
Promise async/await与fetch的概念
前端·javascript·html
xiaoxue..3 小时前
合并两个升序链表 与 合并k个升序链表
java·javascript·数据结构·链表·面试
要加油哦~4 小时前
AI | 实践教程 - ScreenCoder | 多agents前端代码生成
前端·javascript·人工智能
一个public的class4 小时前
你在浏览器输入一个网址,到底发生了什么?
java·开发语言·javascript
青茶3604 小时前
php怎么实现订单接口状态轮询请求
前端·javascript·php
火车叼位4 小时前
脚本伪装:让 Python 与 Node.js 像原生 Shell 命令一样运行
运维·javascript·python
VT.馒头4 小时前
【力扣】2727. 判断对象是否为空
javascript·数据结构·算法·leetcode·职场和发展