JavaScript循环语句(for、while)

目录

一、前言

二、for循环

1. for循环的基本语法和使用方法

2. 循环变量的初始化、条件判断和迭代方式

3. 嵌套for循环的概念和应用场景

4. for-in循环和for-of循环的用途与区别

5. 常见for循环的应用案例

三、while循环

1. while循环的基本语法和使用方法

2. 循环条件的判断和控制

3. do-while循环的特点和使用场景

4. 常见while循环的应用案例

四、循环控制语句

1. break语句的作用和用法

2. continue语句的作用和用法

五、高级循环技巧与优化

1. forEach循环的使用及其特点

2. map、filter、reduce等数组方法的循环替代

3. 循环性能优化的方法和建议

4. 异步循环处理的技巧和解决方案


一、前言

循环是一种重复执行相同或相似任务的方式,是编程中的基本概念之一。在JavaScript中,循环语句用于控制代码的执行次数,对于解决一系列数据或执行特定次数的操作非常有用。

循环语句在JavaScript中的作用主要有两个:遍历数组、对象等数据结构,以及执行特定次数的操作。根据循环类型的不同,JavaScript中的循环语句可以分为三类:for循环、while循环和do-while循环。它们在使用场景和语法上有所不同。

二、for循环

1. for循环的基本语法和使用方法

for循环的基本语法如下:

for ([initialization]; [condition]; [final-expression]) {  // code to be executed  
}

其中,initialization是循环执行前执行的表达式,condition是每次循环执行前检查的条件表达式,final-expression是每次循环执行完毕后执行的表达式。

2. 循环变量的初始化、条件判断和迭代方式

在for循环中,需要初始化循环变量,然后设置条件判断和迭代方式。循环变量的初始化通常是在initialization表达式中进行的,可以在循环开始前将循环变量设为一个初始值。条件判断是在每次循环执行前进行的,如果条件为true,则执行循环体内的代码;否则,跳出循环。迭代方式是在每次循环结束后进行的,可以通过final-expression表达式来更新循环变量。

3. 嵌套for循环的概念和应用场景

嵌套for循环是指在一个for循环内部再包含一个或多个for循环。它们常用于处理二维数组或多层数据结构。例如,可以使用嵌套for循环遍历一个二维数组:

var arr = [[1, 2, 3], [4, 5, 6], [7, 8, 9]];  for (var i = 0; i < arr.length; i++) {  for (var j = 0; j < arr[i].length; j++) {  console.log(arr[i][j]);  }  
}

在上面的代码中,外层for循环遍历数组的每一行,内层for循环遍历每一行的元素。

4. for-in循环和for-of循环的用途与区别

for-in循环用于遍历对象的属性,而for-of循环用于遍历可迭代对象(如数组、字符串等)。它们的区别在于:for-in循环遍历的是对象的属性键,而for-of循环遍历的是对象的值。因此,它们在语法和使用场景上略有不同。例如:

var obj = {a: 1, b: 2, c: 3};  
var arr = ['a', 'b', 'c'];  // for-in loop  
for (var key in obj) {  console.log(key + ': ' + obj[key]);  
}  // for-of loop  
for (var value of arr) {  console.log(value);  
}

在上面的代码中,for-in循环遍历了对象的属性键,并输出了它们的键值对;而for-of循环遍历了数组的元素,并输出了每个元素的值。

5. 常见for循环的应用案例

常见的for循环应用案例包括:遍历数组、遍历对象属性、计算累计和、查找最大/最小值等。例如,可以使用for循环来计算一个数组中所有元素的和:

var arr = [1, 2, 3, 4, 5];  
var sum = 0;  for (var i = 0; i < arr.length; i++) {  sum += arr[i];  
}  console.log(sum); // 输出15

在上面的代码中,使用for循环遍历了数组中的每个元素,并将它们累加到变量sum中,最后输出了它们的总和。

三、while循环

1. while循环的基本语法和使用方法

while循环的基本语法如下:

while (condition) {  // code to be executed  
}

其中,condition是每次循环执行前检查的条件表达式。如果条件为true,则执行循环体内的代码;否则,跳出循环。

2. 循环条件的判断和控制

在while循环中,循环条件通常在循环体外部进行判断。如果条件为true,则执行循环体内的代码;否则,跳出循环。需要注意的是,如果没有合适的条件控制,while循环可能导致无限循环。

3. do-while循环的特点和使用场景

do-while循环与while循环类似,但会先执行一次循环体内的代码,然后再判断循环条件。这种循环常用于确保至少执行一次循环体内的代码。例如,可以使用do-while循环来实现一个简单的倒计时功能。

4. 常见while循环的应用案例

常见的while循环应用案例包括计数器、游戏开发等需要持续执行直到满足特定条件的场景。例如,可以使用while循环来实现一个简单的倒计时功能:

var count = 10;  while (count > 0) {  console.log(count);  count--;  
}


在上面的代码中,使用while循环来输出从10到1的数字,每次循环输出一个数字并递减计数器。

四、循环控制语句

1. break语句的作用和用法

break语句用于跳出当前所在的循环(for、while或do-while循环)。当遇到break语句时,程序会立即跳出当前所在的循环,不再执行循环体内的代码。break语句通常用于在特定条件下提前终止循环。例如:

for (var i = 0; i < 10; i++) {  if (i === 5) {  break; // 当 i 等于 5 时跳出循环  }  console.log(i);  
}

在上面的代码中,使用for循环遍历从0到9的数字。当i等于5时,遇到break语句,程序会立即跳出循环,不再执行后面的代码。因此,输出结果为0到4的数字。

2. continue语句的作用和用法

continue语句用于跳过当前循环中的剩余代码,进入下一次循环。当遇到continue语句时,程序会跳过当前循环中continue语句之后的代码,直接进入下一次循环。continue语句通常用于在特定条件下跳过当前循环中的某些代码。例如:

for (var i = 0; i < 10; i++) {  if (i === 5) {  continue; // 当 i 等于 5 时跳过当前循环中的剩余代码  }  console.log(i);  
}

在上面的代码中,使用for循环遍历从0到9的数字。当i等于5时,遇到continue语句,程序会跳过当前循环中continue语句之后的代码,直接进入下一次循环。因此,输出结果为0到4和6到9的数字。

五、高级循环技巧与优化

1. forEach循环的使用及其特点

forEach循环是一种高级循环方法,用于遍历可迭代对象(如数组、字符串等)。它的基本语法如下:

array.forEach(function(item, index) {  // code to be executed  
});

其中,array是要遍历的数组,function(item, index)是一个回调函数,用于处理数组中的每个元素。item是当前元素的值,index是当前元素的索引。

forEach循环的特点包括:

  • 遍历数组元素时,按照元素的顺序依次执行回调函数。
  • 回调函数中的this关键字指向全局对象(在浏览器中是window对象),可以在回调函数中通过this访问全局变量。
  • 不能在forEach循环中使用break或continue语句来终止或跳过当前循环。如果需要终止循环,可以使用every或some方法。

2. map、filter、reduce等数组方法的循环替代

JavaScript中提供了许多数组方法,如map、filter、reduce等,它们可以替代传统的for循环,简化代码。这些方法的基本用法如下:

  • map方法:对数组中的每个元素执行一次提供的函数,并将结果作为新数组返回。

var newArray = array.map(function(item, index) {  // 对每个元素执行操作,并返回新数组  
});
  • filter方法:创建一个新数组,包含通过提供的函数实现的测试的所有元素。

var newArray = array.filter(function(item, index) {  // 通过测试的元素被包含在新数组中  
});
  • reduce方法:对累加器和数组中的每个元素(从左到右)应用一个函数,将其减少为单个值。

var result = array.reduce(function(accumulator, item, index) {  // 对累加器和每个元素执行操作,并返回单个结果值  
});

3. 循环性能优化的方法和建议

  • 尽量避免在循环中执行复杂的操作,尤其是涉及到DOM操作的情况。可以将操作放在循环外部或者使用缓存来减少重复计算。
  • 避免在循环中使用全局变量或对象,这会导致引擎进行额外的性能开销。可以将变量或对象声明在循环外部或者将其作为参数传递给回调函数。
  • 优先使用原生JavaScript数组方法(如forEach、map、filter、reduce等)而不是使用jQuery等库的方法,因为原生方法通常更快。
  • 避免在循环中使用无限循环或者递归,这会导致浏览器占用大量内存并可能导致崩溃。
  • 对于大型数据集,可以使用分页、懒加载等技术来减少一次加载的数据量,从而提高循环性能。

4. 异步循环处理的技巧和解决方案

JavaScript中的异步循环处理可以通过以下方式实现:

  • 使用Promise和async/await:可以将异步操作封装在Promise中,并使用async/await语法来等待所有异步操作完成。

async function asyncLoop() {  const array = [1, 2, 3, 4, 5];  for (let i = 0; i < array.length; i++) {  const result = await asyncOperation(array[i]);  console.log(result);  }  
}
  • 使用for...of循环和Promise.all:可以使用for...of循环遍历可迭代对象,并使用Promise.all等待所有异步操作完成。

function asyncLoop() {  const array = [1, 2, 3, 4, 5];  const promises = array.map(async (item) => {  const result = await asyncOperation(item);  console.log(result);  });  return Promise.all(promises);  
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/98338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常用排序算法详解

1.冒泡排序原理示例代码实现 2.快速排序原理示例代码实现 3.插入排序原理示例代码实现 4.希尔排序原理示例代码实现 5.选择排序原理示例代码实现 6.堆排序原理示例代码实现 7.归并排序原理示例代码实现 本文讲述了常见的排序算法的执行过程&#xff0c;有详细实现过程举例 1.冒…

git+码云提交PR流程记录

前提条件&#xff1a;注册码云账号&#xff0c;本地安装git 如果不知道怎么注册和安装&#xff0c;可以参考gitgitee入门教程&#xff08;https://bbs.huaweicloud.com/forum/thread-55222-1-1.html&#xff09; 登录自己的码云账号 登陆了之后&#xff0c;在码云上打开目标项…

PHP 将json格式数据转换成数组的方法

php将json数据转换为数组的方法非常简单&#xff0c;php自带的json_decode()就可以实现&#xff0c;但是记住参数后面加上true&#xff0c;返回的便是数组&#xff0c;如果不加返回的便是对象 //json格式数据 $data {"angle":0,"card_region":[{"x&…

项目需求分析5大常见问题及解决方案

需求分析过程中&#xff0c;往往容易导致需求不准确和不完整&#xff0c;引起需求频繁变更&#xff0c;导致项目进度延误和成本增加&#xff1b;而需求分析的误解问题&#xff0c;导致交付产品无法满足客户期待&#xff0c;降低用户满意度和资源浪费。 那么在需求分析中&#x…

力扣第404题 左叶子之和 c++ 递归 与 迭代解法

题目 404. 左叶子之和 简单 给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15&#xff0c;所以返回 24示例 2: 输…

asp.net饭店订餐管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio计算机设计定制

一、源码特点 asp.net 饭店订餐管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语 言开发 asp.net饭店订餐系统 二、功能介…

设计模式 - 访问者模式

目录 一. 前言 二. 实现 三. 优缺点 一. 前言 访问者模式&#xff0c;即在不改变聚合对象内元素的前提下&#xff0c;为聚合对象内每个元素提供多种访问方式&#xff0c;即聚合对象内的每个元素都有多个访问者对象。访问者模式主要解决稳定的数据结构和易变元素的操作之间的…

Unity实现设计模式——策略模式

Unity实现设计模式——策略模式 策略模式是一种定义一些列算法的方法&#xff0c;这些所有的算法都是完成相同的工作&#xff0c;只是实现不同。它可以通过相同的方式调用所有的算法&#xff0c;减少各种算法类与使用算法类之间的耦合。 策略模式的 Strategy 类层次为 Contex…

【Qt控件之QPushButton】使用及技巧

描述 QPushButton类是Qt中用于创建按钮的控件类&#xff0c;它继承自QAbstractButton类。 下面是QPushButton类的一些主要函数说明&#xff1a; QPushButton(QWidget *parent nullptr)&#xff1a;构造函数&#xff0c;创建一个QPushButton对象。 explicit QPushButton(cons…

放大招,百度文心大模型4.0正在加紧训练,即将发布

插播一条快讯&#xff01; &#xfeff;&#xfeff;刚刚看到一篇报道&#xff0c;说百度正在加紧训练文心大模型4.0&#xff01;百度5月发布了文心大模型3.5&#xff0c;才4个多月又要发布4.0了&#xff0c;这迭代速度简直了。据说这次发布将在10月17日百度世界大会上进行&am…

面试题-React(十):setState为什么使用异步机制?

在React中&#xff0c;setState的异步特性和异步渲染机制是开发者们经常讨论的话题。为什么React选择将setState设计为异步操作&#xff1f;异步渲染又是如何实现的&#xff1f;本篇博客将深入探究这些问题&#xff0c;通过代码示例解释为什么异步操作是React的一大亮点。 一、…

NeurIPS 2023 | 李飞飞团队提出SiamMAE:孪生掩码自编码器,刷榜视觉自监督方法

在计算机视觉领域&#xff0c;想要建立图像和场景&#xff08;scene&#xff09;之间之间的对应关系是一项比较困难的任务&#xff0c;尤其是在存在遮挡、视角改变或是物体外观发生变化的情况下。 最近&#xff0c;斯坦福大学李飞飞团队对MAE进行扩展&#xff0c;提出了孪生掩…

Tensorflow入门之 Hello World

Tensorflow入门之 Hello World 简介 Tensorflow 是 Google 开源的深度学习框架&#xff0c;来自于 Google Brain 研究项目&#xff0c;在 Google 第一代分布式机器学习框架 DistBelief 的基础上发展起来。 Tensorflow 的官方网址 http://www.tensorflow.org Tensorflow 的 G…

基于边缘网关的智慧工地监测方案

边缘物联网技术为千行百业赋能&#xff0c;依托边缘计算的低延时、高效率、广适用优势&#xff0c;也为工程建设产业带来新的增长动力。 例如在智慧工地应用中&#xff0c;围绕建设施工过程中的人员、设备、环境等要素&#xff0c;利用边缘计算网关构建全面的数据采集、分析、联…

web3.0时代分布式网络协议的异同

Web3.0时代标志着分布式网络协议的兴起&#xff0c;其中IPFS&#xff08;InterPlanetary File System&#xff09;和NDN&#xff08;Named Data Networking&#xff09;是备受瞩目的项目。尽管它们都属于分布式网络协议领域&#xff0c;但在多个方面存在显著区别。以下是IPFS和…

电子元器件选型与实战应用—05 电容选型第2篇

文章目录 1. 铝电解电容1.1 介绍1.2 铝电解电容优缺点2. 钽电容2.1 介绍2.2 钽电容优缺点3. 三个电容之间对比3.1 温度特性对比3.2 偏压特性对比3.3 ESR-频率曲线4. 电容类型选择5. 电容封装选择前文推荐: 电子元器件选型与实战应用—04 LDO选型、特性及应用电子元器件选型与实…

WebSocket ----苍穹外卖day8

介绍 实现步骤 各个模块详解 OnOpen OnOpen:标记一个方法作为处理WebSocket连接打开的方法 当一个客户端与服务器建立 WebSocket 连接时&#xff0c;服务器会接收到一个连接请求。一旦服务器接受了这个连接请求&#xff0c;一个 WebSocket 连接就会被建立。这时&#xff0c;被…

SpringMVC中异常处理详解

单个控制器异常处理 // 添加ExceptionHandler&#xff0c;表示该方法是处理异常的方法&#xff0c;属性为处理的异常类ExceptionHandler({java.lang.NullPointerException.class,java.lang.ArithmeticException.class})public String exceptionHandle1(Exception ex, Model mo…

Android kotlin内联函数(inline)的详解与原理

一、介绍 在kotlin中&#xff0c;有一种函数叫内联函数&#xff0c;这种函数标识符是inline&#xff0c;但是好多人对这个函数的理解只停留在八股文中&#xff0c;内容函数的用法和普通函数没有区别&#xff0c;但是在编译原理上是有&#xff0c;对程序的性能有一定的影响。 二…

wpf中prism框架

安装prism包&#xff1a; 添加引用 using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Threading.Tasks; using System.Windows; using Prism.DryIoc; using Prism.Ioc;namespace PrismDemo …