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 来控制循环流程,但要避免过度使用导致代码难以理解。

相关推荐
css趣多多10 分钟前
ctx 上下文对象控制新增 / 编辑表单显示隐藏的逻辑
前端
阔皮大师16 分钟前
INote轻量文本编辑器
java·javascript·python·c#
lbb 小魔仙16 分钟前
【HarmonyOS实战】React Native 表单实战:自定义 useReactHookForm 高性能验证
javascript·react native·react.js
_codemonster17 分钟前
Vue的三种使用方式对比
前端·javascript·vue.js
寻找奶酪的mouse18 分钟前
30岁技术人对职业和生活的思考
前端·后端·年终总结
梦想很大很大25 分钟前
使用 Go + Gin + Fx 构建工程化后端服务模板(gin-app 实践)
前端·后端·go
We་ct27 分钟前
LeetCode 56. 合并区间:区间重叠问题的核心解法与代码解析
前端·算法·leetcode·typescript
张3蜂34 分钟前
深入理解 Python 的 frozenset:为什么要有“不可变集合”?
前端·python·spring
无小道34 分钟前
Qt——事件简单介绍
开发语言·前端·qt
广州华水科技36 分钟前
GNSS与单北斗变形监测技术的应用现状分析与未来发展方向
前端