Javascript 中循环的使用

Javascript 中循环的使用

个人主页:康师傅前端面馆


JavaScript 提供了多种循环结构来处理重复任务,最常见的包括 forwhiledo...while 循环,以及高级的 for...infor...of 循环和数组的 forEachmap 等方法。合理使用这些循环结构可以提高代码的效率和可读性。

1. 基础用法

1.1 for 循环

for 循环是最常用的循环结构之一,适合已知循环次数的情况。

javascript 复制代码
for (let i = 0; i < 5; i++) {
  console.log(i); // 输出 0 到 4
}

1.2 while 循环

while 循环适用于在满足条件时重复执行代码块。

javascript 复制代码
let i = 0;
while (i < 5) {
  console.log(i);
  i++;
}

1.3 do...while 循环

do...while 循环至少执行一次代码块,然后在满足条件时继续执行。

javascript 复制代码
let i = 0;
do {
  console.log(i);
  i++;
} while (i < 5);

2. 高级操作

2.1 for...in 循环

for...in 循环用于遍历对象的可枚举属性。

javascript 复制代码
const obj = { a: 1, b: 2, c: 3 };
for (let key in obj) {
  console.log(key, obj[key]);
}

2.2 for...of 循环

for...of 循环用于遍历可迭代对象(如数组、字符串等)。

javascript 复制代码
const arr = [1, 2, 3];
for (let value of arr) {
  console.log(value);
}

2.3 forEach 方法

数组的 forEach 方法提供了一种更简洁的遍历方式。

javascript 复制代码
const arr = [1, 2, 3];
arr.forEach((value, index) => {
  console.log(index, value);
});

2.4 map 方法

map 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数。

javascript 复制代码
const arr = [1, 2, 3];
const doubled = arr.map(x => x * 2);
console.log(doubled); // [2, 4, 6]

3. 副作用与注意事项

3.1 无限循环

忘记更新循环变量可能导致无限循环。

javascript 复制代码
// 错误示例:忘记更新 i
for (let i = 0; i < 5;) {
  console.log(i);
}

3.2 修改循环变量

在循环中修改循环变量可能导致意外行为。

javascript 复制代码
// 错误示例:在循环中修改循环变量
for (let i = 0; i < 5; i++) {
  console.log(i);
  i--; // 会导致无限循环
}

3.3 使用 breakcontinue

break 用于跳出循环,continue 用于跳过当前迭代。

javascript 复制代码
for (let i = 0; i < 10; i++) {
  if (i === 3) continue; // 跳过 i=3
  if (i === 7) break;    // 在 i=7 时跳出循环
  console.log(i);
}

4. 推荐方案

  1. 优先使用 for...of :对于数组和可迭代对象,优先使用 for...of 循环,因为它更简洁且不易出错。
javascript 复制代码
const arr = [1, 2, 3];
for (let value of arr) {
  console.log(value);
}
  1. 使用函数式方法 :对于数组操作,优先使用 mapfilterreduce 等函数式方法,它们更易读且不易产生副作用。
javascript 复制代码
const arr = [1, 2, 3];
const doubled = arr.map(x => x * 2);
  1. 避免修改循环变量:在循环中避免修改循环变量,以防止意外行为。

  2. 合理使用 breakcontinue :在适当情况下使用 breakcontinue 来控制循环流程,但要避免过度使用导致代码难以理解。

相关推荐
kyriewen16 小时前
别再 console.log 了:5 个 Chrome DevTools 调试技巧,用过就回不去了
前端·javascript·面试
IT_陈寒17 小时前
Python搞不定字符串编码?这破玩意坑我两小时!
前端·人工智能·后端
To_OC17 小时前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode
DigitalOcean19 小时前
Laravel 开发者已在 DigitalOcean 上开通超过 10 万台服务器
前端·laravel
星始流年19 小时前
从 Tool 到 Skill——基于 LangChain 的服务端Skill实现
前端·langchain·agent
李惟19 小时前
开源本地通信库,纯客户端 RPC,像聊天一样通信
前端
YAwu1119 小时前
深入解析 React 炫彩鼠标跟随标题组件:从坐标定位到动画性能
前端·react.js
GuWenyue19 小时前
排序效率低?5分钟吃透快速排序,性能飙升至O(nlogn)
前端·javascript·面试
OpenTiny社区19 小时前
🎨 看完 GenUI SDK 源码我悟了!
前端·vue.js·github
叁两19 小时前
前端转型AI Agent该如何学习?(前置篇)
前端·人工智能·node.js