JavaScript 循环结构注意事项示例详解

 更新时间:2025年06月28日 10:09:44   作者:随记  
循环作为算法与数据结构中的基石,JS与其他编程语言一样,都提供了多种循环结构用于处理数据, 本文给大家介绍JavaScript 循环结构注意事项,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧

HELLO,这里是大熊的前端开发笔记。

循环作为 算法与数据结构 中的基石,JS 与其他编程语言一样,都提供了多种循环结构用于处理数据。

for 循环

事物的开端往往都是从最常用的开始,循环结构咱们从 for 循环说起。

语法:

for (初始化; 条件; 增量) {
  // ...
}

示例:

// 增量每次 +1
for (let i = 0; i < 10; i++) {
  console.log(i);
}
// 增量每次 +2
for (let i = 0; i < 10; i += 2) {
  console.log(i);
}

性能优化:

在使用 for 循环遍历数组的时候,可以提前缓存数组长度,减少 length 的访问次数。

const arr = ['前', '端', '路', '引'];
// 提前使用 len 缓存数组长度
for (let i = 0, len = arr.length; i < len; i++) {
  console.log(arr[i]);
}

此示例中使用了 let 同时声明了多个变量,在常规的代码编写中,不建议这么使用,但在循环体这种特殊情况下,这么写也能接受。

// 同时声明多个变量
let a = '前端路引', b = 2, c = true;

增量不一定要使用 i++ 自增,也可以使用 i-- 递减,或者使用 i += 2 步进,甚至可以是 i += 10

for in 循环

ES6 规范出现之前,只能使用 for in 循环遍历对象,但这哥们有个坑,不止会遍历对象自身属性,还能遍历原型链上可枚举属性。

const obj1 = {
  name: '前端路引', 
  age: 1,
  'favorite-color': 'red', 
}
for (let key in obj1) {
  console.log(key, obj1[key]);
}
/*
// 输出结果
name 前端路引
age 1
favorite-color red
*/

看个遍历原型链例子:

// 如果有兄弟不小心给对象的原型链上填了一笔
Object.prototype.test = '我是原型链上的测试属性';

const obj1 = {
  name: '前端路引', 
  age: 1,
  'favorite-color': 'red', 
}
for (let key in obj1) {
  console.log(key, obj1[key]);
}
/*
// 输出结果
name 前端路引
age 1
favorite-color red
test 我是原型链上的测试属性
*/

for (const key in obj1) {
  if (obj.hasOwnProperty(key)) {  // 过滤掉原型链属性
    console.log(key, obj1[key]);
  }
}
/*
// 输出结果
name 前端路引
age 1
favorite-color red
*/

如上所示,代码编写规范建议不要对 JS 自身的原型链做修改,扩展原型链虽然方便了一些对象操作,但实际上这是埋了雷的,不知道啥时候就会引爆!!

在使用 for in 循环也需要注意原型链的属性,必须使用 hasOwnProperty 方法来过滤掉原型链上的属性。

for of 循环

由于 for in 的各种弊端,后来定规范的大佬们,就新增了一个 for of 循环用于遍历可迭代对象,比如:数组、字符串、Set、Map 等等。

const obj1 = {
  name: '前端路引', 
  age: 1,
  'favorite-color': 'red', 
}
// for of 循环
for (let [key, value] of Object.entries(obj1)) {
  console.log(key, value);
}
/* // 以上 let [key, value] 使用了 解构赋值,其代码等于
for (let item of Object.entries(obj1)) {
  const [key, value] = item;
  console.log(key, value);
}
// 又等于
for (let item of Object.entries(obj1)) {
  const key = item[0];
  const value = item[1];
  console.log(key, value);
}
*/

for of 无法直接遍历对象,需要遍历对象时,需使用内置方法 Object.entries 将对象转为数组,再使用 for of 遍历,或者使用 Object.keys/Object.values 将对象转为键/值数组再遍历。

相比于 for in 循环,for of 循环性能更好,也不用考虑原型链问题。

while 循环

while 循环多用于不确定循环次数的应用场景,比如读取文件数据流,并不知道需要循环多少次才能读取完。

let i = 0;

while (i < 3) {
  console.log(i);
  i++;
}

一般能用 for 循环的场景,都能使用 while 循环替代。

do while 循环

这个循环可有意思了,不管条件是否满足,都会先跑一次循环体,再判断条件。

应用场景例子:必须让用户先输入,再判断条件,直到输入正确才继续。

let userInput;
do {
  userInput = prompt("请输入一个大于 10 的数字:");
} while (isNaN(userInput) || Number(userInput) <= 10);

console.log("有效输入:", userInput);

死循环

在使用循环遍历时候,需特别注意 死循环 问题,条件处理不好,就进入死循环,导致程序崩溃。

比如:

let i = 0;

while (i < 3) {
  console.log(i);
  // i++; // 忘记修改 i 的值,导致进入死循环
}

善用退出循环

continue / break / return 三个关键字都可以用来处理循环逻辑,不同的是:

  • continue:跳过当前循环,继续下一次循环。
  • break:跳出当前循环,不再继续循环。
  • return:跳出当前函数,不再继续执行。

continue 示例:

function loop1 () {
  for (let i = 0; i < 10; i++) {
    if (i % 2 === 0) {
      continue; // 跳过偶数次循环,只输出奇数次循环
    }
    console.log(i); // 输出 1 3 5 7 9
  }
  console.log('循环结束'); // 会执行
}
loop1()

break 示例:

function loop2 () {
  for (let i = 0; i < 10; i++) {
    if (i === 5) {
      break; // 在第 6 次循环退出
    }
    console.log(i); // 输出 0 1 2 3 4
  }
  console.log('循环结束'); // 会执行
}
loop2()

return 示例:

function loop3 () {
  for (let i = 0; i < 10; i++) {
    if (i === 5) {
      return; // 在第 6 次循环退出函数,不会执行循环体后面的代码
    }
    console.log(i); // 输出 0 1 2 3 4
  }
  console.log('循环结束'); // 此行代码不会执行
}
loop3()

三个退出循环关键字都可以用于所有的循环语句,不要局限于 for 循环~~

写在最后

如果说算法是程序的灵魂,那么循环可以算是算法的基石,很多常见的算法都需要使用循环实现,比如各种数组排序算法、查找算法、最短路径算法等等。

循环是程序中的必修课,任何编程语言都有它的身影。

到此这篇关于Web前端入门第 62 问:JavaScript 循环结构注意事项的文章就介绍到这了,更多相关JavaScript 循环结构内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Javascript日期时间函数的使用方法举例

    Javascript日期时间函数的使用方法举例

    在JavaScript中日期时间函数是一组用于操作和处理日期和时间的函数,这些函数可以用于获取当前日期和时间、格式化日期和时间、计算日期和时间的差异、转换日期和时间的格式等,这篇文章主要给大家介绍了关于Javascript日期时间函数的使用方法,需要的朋友可以参考下
    2024-02-02
  • javascript利用初始化数据装配模版的实现代码

    javascript利用初始化数据装配模版的实现代码

    实现一个通用方法,使用初始化数据来装配模版。需要的朋友可以参考下。
    2010-11-11
  • javascript用正则表达式过滤空格的实现代码

    javascript用正则表达式过滤空格的实现代码

    下面小编就为大家带来一篇javascript用正则表达式过滤空格的实现代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • 详解一个小实例理解js原型和继承

    详解一个小实例理解js原型和继承

    这篇文章主要介绍了js原型和继承,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • BootStrap中关于Select下拉框选择触发事件及扩展

    BootStrap中关于Select下拉框选择触发事件及扩展

    Select下拉框的问题,想在选择一个选项后,前台显示做出变动,并且知道选择的是第几个选项。 怎么解决这个问题呢?下面小编给大家带来了BootStrap中关于Select下拉框选择触发事件及扩展,需要的朋友参考下吧
    2016-11-11
  • JavaScript获取表格(table)当前行的值、删除行、增加行

    JavaScript获取表格(table)当前行的值、删除行、增加行

    这篇文章主要介绍了JavaScript获取表格(table)当前行的值、删除行、增加行,本文直接给出代码示例,需要的朋友可以参考下
    2015-07-07
  • js+css实现select的美化效果

    js+css实现select的美化效果

    这篇文章主要为大家详细介绍了js+css实现select的美化效果,如何针对select进行美化,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • js几秒以后倒计时跳转示例

    js几秒以后倒计时跳转示例

    使用js实现几秒以后倒计时跳转,这个在某些特殊情况下还是比较实用的,下面为大家介绍下具体的实现步骤,感兴趣的朋友不要错过
    2013-12-12
  • js检测判断日期大于多少天的方法

    js检测判断日期大于多少天的方法

    这篇文章主要介绍了js检测判断日期大于多少天的方法,涉及javascript操作日期的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-05-05
  • 小程序实现搜索框

    小程序实现搜索框

    搜索框无论是在电商网站还是小程序中都很常见,这篇文章主要就为大家详细介绍了小程序如何实现搜索框,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07

最新评论