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

js分支语句和循环语句

js分支语句和循环语句

@jarringslee

分支语句

单分支 if

只判断一次,条件为真就执行,为假直接跳过。

if (条件) {// 条件为真时执行
}
let age = 18;
if (age >= 18) {console.log('成年');
}

双分支 if-else

条件为真执行 A,否则执行 B。

if (条件) {// 条件为真
} else {// 条件为假
}
let score = 59;
if (score >= 60) {console.log('及格');
} else {console.log('完蛋');
}

三元运算符 ? :

把双分支 if-else 缩成一行,必须有 else,并返回一个值。

条件 ?A :B
let num = prompt('请输入一个数字')
num = num < 10 ? 0 + num : num
//0 + num是字符串相加的形式,给个位数补一个0
形式关键字行数返回值使用场景
单 ifif只做一件事
if-elseif...else二选一
三元运算符? :1简单二选一,要返回值
  • 三元运算符必须有 elseif 可以没有。
  • 三元运算符不能写多条语句;复杂逻辑用 if-else。

switch分支

switch 就是“多选一”的快捷 if-else 链——把同一个变量/表达式的不同取值,一一对照执行。

基本语法

switch (表达式) {case1:语句块1;break;          // 记得 break,否则会继续往下“穿透”case2:语句块2;break;...default:          // 相当于最后的 else默认语句;
}
let day = 3;
switch (day) {case 1:console.log('周一');break;case 2:console.log('周二');break;case 3:console.log('周三');break;default:console.log('未知');
}
// 输出:周三

几个注意点

  1. 全等比较
    switch 用的是 ===,不会自动类型转换。

    switch ('2') {case 2:        // 不会命中,因为 '2' !== 2...
    }
    
  2. break 穿透
    忘写 break 会把下面所有 case 都执行一遍。
    有时故意利用穿透做“合并”:

    switch (score) {case 5:case 4:console.log('优秀'); // 4 和 5 都会走这里break;
    }
    
  3. default 可省
    如果所有 case 都不匹配且没有 default,就什么都不做。

何时用 switch?

场景推荐写法
同一个变量的离散值switch
区间判断(> <)if-else
复杂逻辑 / 多条件if-else / 对象映射

“变量等值多选一,switch 比 if-else 更清爽;记得 break 防穿透,default 兜底别忘掉。”
switch小练习:ATM存款机
利用while循环的特点创建无限循环的用户弹窗与用户进行交互;用switch语句创建存款、取款等不同服务。注意处理余额不足、输入不当等问题。

<script>let money = 1000;while (true) {const num = Number(prompt(`请选择操作:\n1. 存钱\n2. 取钱\n3. 查看余额\n4. 退出`));if (num === 4) break;            // 退出if (isNaN(num) || num < 1 || num > 3) {alert('请输入 1~4 之间的数字!');continue;}switch (num) {case 1: {const add = Number(prompt('请输入存钱金额'));if (isNaN(add) || add <= 0) { alert('金额无效'); break; }money += add;alert(`存入成功,余额:${money}`);break;}case 2: {const take = Number(prompt('请输入取钱金额'));if (isNaN(take) || take <= 0) { alert('金额无效'); break; }if (take > money) { alert('余额不足'); break; }money -= take;alert(`取出成功,余额:${money}`);break;        // 漏掉的 break 已补上}case 3:alert(`当前余额:${money}`);break;}}alert('感谢使用,再见!');</script>

循环语句

while循环

while (判断条件) {循环命令条件增量
}

continue & break

break 直接跳出整个循环(或 switch),循环结束;

continue 立即跳过本次迭代,继续下一轮循环。

关键字作用范围效果描述常见场景
break循环 / switch立即终止当前结构,后续不再执行找到目标值后提前结束
continue仅循环跳过本次剩余代码,继续下一轮过滤/跳过不想要的值

代码示例

// break:找到 5 就停
for (let i = 1; i <= 10; i++) {if (i === 5) break;   // 遇到 5 立即跳出console.log(i);       // 1 2 3 4
}// continue:跳过 5
for (let i = 1; i <= 5; i++) {if (i === 3) continue; // 跳过 3console.log(i);        // 1 2 4 5
}

break “炸” 整个循环,continue “跳过” 这一回。

for循环

for (let i = 0; i < 3; i++) {console.log(i);   // 0 1 2
}
  • 三个格子:起点; 条件; 步长
  • let 代替 C 的 int,用完就丢(不会泄漏出来)。
例子结果
忘更新for(let i=0; i<3; ) { ... }死循环
varfor(var i=0; i<3; i++) { }
console.log(i)
循环外还能打印 i(3)
条件写错for(let i=0; i>-1; i++)死循环
let sum = 0;
for (let i = 1; i <= 5; i++) {sum += i;
}
console.log(sum);   // 15

明确循环次数用for,不明确用while

for循环小练习1:九九乘法表
固定的两层for循环。主要需要动脑子的点在于在输出中添加标签并设置css属性。

<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>span {display: inline-block;border: 1px solid blue;border-collapse: collapse;margin: 2px 2px;height: 25px;width: 80px;text-align: center;border-radius: 4px;box-shadow: 1px 1px 1px 1px grey;color: hotpink;}</style>
</head><body><script>for (let i = 1; i <= 9; i++) {for (let j = 1; j <= i; j++) {document.write(`<span>${i} x ${j} = ${i * j}</span>`)}document.write('<br>')}</script>
</body>

for循环小练习2:冒泡排序
和C语言冒泡排序基本相同,在数组的声明上略微有些不同。

<script>let n = +prompt('您想输入几个数字?')let arr = []for (let i = 0; i < n; i++) {arr[i] = + prompt(`请您输入第${i + 1}个数字:`)}for (let i = 0; i < arr.length - 1; i++) {for (let j = i + 1; j < arr.length; j++) {if (arr[i] > arr[j]) {let t = arr[i]arr[i] = arr[j]arr[j] = t}}}document.write('排序后的顺序为:')for (let i = 0; i < arr.length; i++) {if (i != arr.length - 1) document.write(`${arr[i]}`)else document.write(`${arr[i]}`)}</script>

文章转载自:
http://amperometric.gbfuy28.cn
http://cem.gbfuy28.cn
http://alumni.gbfuy28.cn
http://armourbearer.gbfuy28.cn
http://bateleur.gbfuy28.cn
http://ah.gbfuy28.cn
http://apocalypse.gbfuy28.cn
http://brekkie.gbfuy28.cn
http://acoasm.gbfuy28.cn
http://cholangitis.gbfuy28.cn
http://chimaeric.gbfuy28.cn
http://cheero.gbfuy28.cn
http://aral.gbfuy28.cn
http://accouterments.gbfuy28.cn
http://apercu.gbfuy28.cn
http://budgeteer.gbfuy28.cn
http://astrometry.gbfuy28.cn
http://ascogonium.gbfuy28.cn
http://baaskaap.gbfuy28.cn
http://autograft.gbfuy28.cn
http://cappy.gbfuy28.cn
http://bilgy.gbfuy28.cn
http://brittle.gbfuy28.cn
http://bunting.gbfuy28.cn
http://catachrestial.gbfuy28.cn
http://acidfast.gbfuy28.cn
http://anisocytosis.gbfuy28.cn
http://bilinear.gbfuy28.cn
http://agronomy.gbfuy28.cn
http://bugler.gbfuy28.cn
http://www.dtcms.com/a/281678.html

相关文章:

  • 如何写一份有效的技术简历?
  • vscode输出中文乱码问题的解决
  • QTableView鼠标双击先触发单击信号
  • Vue 常用的 ESLint 规则集
  • resources为什么是类的根目录
  • Linux 基本操作与服务器部署
  • 【高等数学】第三章 微分中值定理与导数的应用——第一节 不定积分的概念与性质
  • Android 图片压缩
  • 21.映射字典的值
  • 【强化学习】Reinforcement Learning基础概述
  • 如何进行 Docker 数据目录迁移
  • 三轴云台之深度学习算法篇
  • vscode配置运行完整C代码项目
  • QGIS新手教程9:字段计算器进阶用法与批量处理技巧
  • onecode 3.0 微内核引擎 基础注解驱动的速查手册(服务治理及通讯)
  • Altium Designer(AD)25软件下载及安装教程(7.9)
  • Axios方法完成图书管理页面完整版
  • Redis Desktop Manager(RDM)下载与安装使用教程
  • JavaScript中关于环境对象的拓展
  • 【Qt】 设计模式
  • Docker 镜像推送至 Coding 制品仓库超时问题排查与解决
  • 业务分析业务架构视角
  • 软件测试面试经历分享?
  • 在 SymPy 中精确提取三角函数系数的深度分析
  • LLM面试题目 3
  • 项目进度与预算脱节,如何进行同步管理
  • Linux部署Redis
  • 46. 携带研究材料(01背包二维数组)
  • Java程序员学从0学AI(五)
  • 发票查验接口的计费规则-核验成功返回参数