当前位置: 首页 > news >正文

JavaScript while 循环

JavaScript while 循环学习笔记

1. while 循环基础

基本语法

while(条件表达式){// 循环体代码// 当条件为 true 时执行}

工作原理

  1. 首先检查条件表达式
  2. 如果条件为true,执行循环体代码
  3. 执行完循环体后,再次检查条件
  4. 重复步骤 2-3,直到条件为false
  5. 条件为false时,退出循环

简单示例

letcount=0;while(count<5){console.log(`计数:${count}`);count++;// 重要:更新计数器,避免无限循环}// 输出:// 计数:0// 计数:1// 计数:2// 计数:3// 计数:4

2. 关键注意事项

避免无限循环

// ❌ 错误示例:无限循环leti=0;while(i<5){console.log(i);// 忘记更新 i,导致无限循环}// ✅ 正确示例letj=0;while(j<5){console.log(j);j++;// 必须更新循环变量}

条件为 false 时不执行

letx=10;while(x<5){console.log("这行代码不会执行");}console.log("循环结束");// 直接执行到这里

3. while 循环实用场景

场景 1:数组遍历

constfruits=["苹果","香蕉","橙子","葡萄"];letindex=0;while(index<fruits.length){console.log(`水果${index+1}:${fruits[index]}`);index++;}

场景 2:用户输入验证

letpassword="";while(password!=="123456"){password=prompt("请输入密码:");if(password===null){alert("已取消登录");break;}if(password!=="123456"){alert("密码错误,请重试");}}if(password==="123456"){alert("登录成功!");}

场景 3:数字累加

letsum=0;letnumber=1;while(number<=100){sum+=number;number++;}console.log(`1 到 100 的和:${sum}`);// 输出:5050

4. 循环控制语句

break 语句

letnum=1;while(num<=10){if(num===5){console.log("遇到 5,跳出循环");break;}console.log(num);num++;}// 输出: 1, 2, 3, 4, "遇到 5,跳出循环"

continue 语句

leti=0;while(i<10){i++;if(i%2===0){continue;// 跳过偶数}console.log(i);// 只输出奇数}// 输出: 1, 3, 5, 7, 9

5. while vs for 循环

选择建议

  • 使用 while:当循环次数不确定,需要基于条件判断时
  • 使用 for:当循环次数确定,或需要计数器时

对比示例

// for 循环(已知次数)for(leti=0;i<5;i++){console.log(i);}// while 循环(条件判断)letcount=0;while(count<5){console.log(count);count++;}// 两者功能相同,但 while 更适合不确定次数的场景

6. 常见陷阱与最佳实践

陷阱 1:忘记更新循环变量

// ❌ 错误letx=0;while(x<3){console.log(x);// 忘记 x++}// ✅ 正确lety=0;while(y<3){console.log(y);y++;}

陷阱 2:条件表达式错误

// ❌ 错误:使用 = 而不是 == 或 ===letz=0;while(z=5){// 这会将 z 赋值为 5,条件永远为 trueconsole.log(z);z++;}// ✅ 正确letw=0;while(w<5){console.log(w);w++;}

最佳实践

  1. 始终确保循环会终止:更新循环变量
  2. 使用有意义的变量名:提高代码可读性
  3. 添加注释:说明循环的目的和逻辑
  4. 考虑使用 for 循环:当循环次数确定时
  5. 测试边界条件:确保循环在正确条件下开始和结束

7. 综合练习

练习 1:查找质数

functionfindPrimes(max){letnum=2;while(num<=max){letisPrime=true;letdivisor=2;while(divisor*divisor<=num){if(num%divisor===0){isPrime=false;break;}divisor++;}if(isPrime){console.log(num);}num++;}}findPrimes(20);// 输出:2, 3, 5, 7, 11, 13, 17, 19

练习 2:猜数字游戏

functionguessNumberGame(){consttarget=Math.floor(Math.random()*100)+1;letguess=0;letattempts=0;while(guess!==target){guess=parseInt(prompt("猜一个 1-100 之间的数字:"));attempts++;if(guess===null){alert("游戏取消");return;}if(guess<target){alert("太小了!");}elseif(guess>target){alert("太大了!");}else{alert(`恭喜!你用了${attempts}次猜对了数字${target}`);}}}// guessNumberGame(); // 取消注释以运行游戏

8. 总结

while 循环特点

  • ✅ 适合不确定循环次数的场景
  • ✅ 条件判断灵活
  • ✅ 代码结构清晰
  • ⚠️ 容易忘记更新循环变量导致无限循环
  • ⚠️ 需要手动管理循环变量

学习要点

  1. 理解 while 循环的执行流程
  2. 掌握避免无限循环的方法
  3. 熟悉 break 和 continue 的使用
  4. 学会根据场景选择合适的循环结构
  5. 通过实践掌握常见应用场景

下一步学习

  • do-while 循环(至少执行一次)
  • 嵌套循环
  • 循环性能优化
  • 函数式编程替代方案(map, filter, reduce)
http://www.jsqmd.com/news/646779/

相关文章:

  • 别再到处找免费股票数据了!实测StockAPI.com.cn的Python/JS/Java调用避坑指南
  • 机器学习平台安全
  • AURIX TC397开发实战:基于UDE的仿真调试与问题排查指南
  • 【交换技术原理-STP生成树】
  • 香橙派5 NPU实战:从零部署Yolov5模型并实现实时推理
  • 5分钟搞定!用扣子+飞连实战搭建企业级产品问答机器人(附完整配置流程)
  • Open CASCADE+Qt:构建交互式3D显示窗口(实战篇)
  • Claude AI 助力发现 Apache ActiveMQ 潜伏 13 年 RCE 漏洞
  • 八自由度车辆动力学Simulink仿真模型(包括.slx文件、.m车辆参数文件及Word说明文档)
  • 【计算机网络】VRRP协议实战:高可用网络架构设计与故障转移优化
  • 题解:洛谷 B2094 不与最大数相同的数字之和
  • ESP32开发实战:用vTaskList()诊断任务栈溢出与内存优化的5个技巧
  • Memtest86+终极指南:如何快速检测内存故障的完整教程
  • CAD红绿灯
  • JavaScript break 和 continue 语句
  • 手把手教你用VASP 6.4在OpenBayes云平台训练硅的机器学习力场(附声子谱验证)
  • 别再手动算CRC了!用OutputLogic.com的代码生成器,5分钟搞定FPGA的Verilog实现
  • AI 路由暗藏漏洞,恶意攻击可盗取核心敏感信息
  • 告别马赛克!用Pytorch复现SRResNet,手把手教你给老照片‘无损放大’
  • DeepSeek推理模型实战:如何利用CoT机制提升AI回答的可解释性(Python示例)
  • 题解:洛谷 B2095 白细胞计数
  • GSYVideoPlayer - 多核切换与高级渲染模式实战指南
  • 20252417 实验二《Python程序设计》实验报告
  • moveit servo 发指令给real arm
  • Llama-3.2V-11B-cot教育领域效果:自动批改作业与生成个性化习题
  • MeshLab进阶技巧:如何用边界提取+二次裁剪实现复杂模型分块(以STL文件为例)
  • Chromium魔改实战:如何打造一个随机指纹的高匿名爬虫浏览器(附Canvas指纹绕过技巧)
  • 告别手动启动:用NSSM把Nginx、Redis、Java Jar包一键注册为Windows服务(保姆级教程)
  • 刚刚,Anthropic官方Harness被LangChain悄悄开源了~
  • CAN FD与传统CAN混用方案:基于STM32G473的双模式配置详解