JavaScript --04. 流程控制语句介绍

news2024/11/26 8:21:02

文章目录

  • 流程控制
    • 1 代码块
      • 1.1 声明代码块
      • 1.2 let 和 var的作用域
    • 2 条件判断语句 -- if语句
    • 3 条件分支语句
      • 3.1 if-else语句
      • 3.2 if-else if-else语句
      • 3.3 练习
    • 4 Switch语句
    • 5 循环语句
      • 5.1 While循环
      • 5.2 do-while循环
      • 5.3 for循环
      • 5.4 嵌套循环
    • 6 break和continue
      • 6.1 break
      • 6.2 continue

流程控制

这部分内容讲解了JS中的流程控制语句。主要有:代码块、if-else语句、switch-case语句、while语句、do-while语句、for语句。

流程控制语句可以用来改变程序执行的顺序

  1. 条件判断语句
  2. 条件分支语句
  3. 循环语句

1 代码块

1.1 声明代码块

使用 {} 来创建代码块,代码块可以用来对代码进行分组,

同一个代码中的代码,就是同一组代码,一个代码块中的代码要么都执行要么都不执行

整体执行顺序的话还是自上而下执行

{
    let a = 10
    console.log(a)
}
{
    console.log(b)
    document.write("哈哈")
}

1.2 let 和 var的作用域

  • 在JS中,使用let声明的变量具有块作用域,在代码块中声明的变量无法在代码块的外部访问

  • 使用var声明的变量,不具有块作用域

image-20221130140733508

2 条件判断语句 – if语句

  • 语法:

    if(条件表达式){
    	语句...
    }
    
  • 执行流程

    • if语句在执行会先对if后的条件表达式进行求值判断,
      • 如果结果为true,则执行if后的语句
      • 如果为false则不执行
  • if语句只会控制紧随其后其后的那一行代码,如果希望可以控制多行代码,可以使用{}将语句扩起来

  • 最佳实践:即使if后只有1行代码,我们也应该编写代码块,这样结构会更加的清晰

如果if后的添加表达式不是布尔值,会转换为布尔值然后再运算

if(true){
    console.log(10)
}

let a = 20
if(a > 10){
    console.log("a比1 0大")
}

if(a){
    console.log("a的值计算为true")
}

3 条件分支语句

3.1 if-else语句

  • 语法:

    if(条件表达式){
    	语句...
    }else{
    	语句...
    }
    
  • 执行流程:

    • if-else执行时,先对条件表达式进行求值判断,
      • 如果结果为true 则执行if后的语句
      • 如果结果为false 则执行else后的语句
let age = 55
if(age >= 60){
    alert('你已经退休了!')
}else{
    alert('你还没有退休!')
}

3.2 if-else if-else语句

  • 语法:

    if(条件表达式){
    	语句...
    }else if(条件表达式){
    	语句...
    }else if(条件表达式){
    	语句...
    }else if(条件表达式){
    	语句...
    }else{
    	语句...
    }
    
  • 执行流程:

    • if-else if-else语句,会自上向下依次对if后的条件表达式进行求值判断,
      • 如果条件表达式结果为true,则执行当前if后的语句,执行完毕语句结束
      • 如果条件表达式结果为false,则继续向下判断,直到找到true为止
      • 如果所有的条件表达式都是false,则执行else后的语句

注意:if-else if-else语句中只会有一个代码块被执行,一旦有执行的代码块,下边的条件都不会在继续判断了,所以一定要注意条件的编写顺序

let age = 55
if (age >= 100) {
    alert('你真是一个长寿的人!')
} else if (age >= 80) {
    alert('你比楼上那位还年轻不小!')
} else if (age >= 60) {
    alert('你已经退休了!')
} else if (age >= 30) {
    alert('你已经步入中年了!')
} else if (age >= 18) {
    alert('你已经成年了!')
} else {
    alert('你还未成年!')
}

3.3 练习

使用promot()可以获取用户输入的内容,类型是字符串,所以如果需要数字的话需要先转换一下

它会将用户输入的内容以字符串的形式返回,可以通过变量来接收

let num = +prompt("请输入一个整数:")

alert(typeof num)
  1. 编写一个程序,获取一个用户输入的整数。然后通过程序显示这个数是奇数还是偶数。

    通过一个数对1取模判断是不是和0全等来看是不是一个小数

    image-20221130142440145

    使用isNaN()来判断一个值是不是NaN

    // let num = +prompt("请输入一个整数")
    let num = parseInt(prompt("请输入一个整数"))
    
    // 验证一下,用户的输入是否合法,只有是有效数字时,我们才检查它是否是偶数
    // 我们不能使用==或===来检查一个值是否是NaN
    // 可以使用isNaN()函数来检查一个值是否是NaN
    if (isNaN(num)) {
        alert("你的输入有问题,请输入整数!")
    } else if(num % 1 !== 0){
      	alert("你的输入是小数,请输入整数!")  
    } else {
        // 然后通过程序显示这个数是奇数还是偶数。
        if (num % 2 === 0) {
            alert(`${num} 是偶数!`)
        } else {
            alert(`${num} 是奇数!`)
        }
    }
    
  2. 从键盘输入小明的期末成绩:当成绩为100时,‘奖励一辆BMW’,当成绩为[80-99]时,‘奖励一台iphone’,当成绩为[60-79]时,‘奖励一本参考书’,其他时,什么奖励也没有

    //从键盘输入小明的期末成绩
    let score = +prompt('请输入小明的期末成绩:')
    
    // 检查score是否合法
    if (isNaN(score) || score < 0 || score > 100) {
        alert('请输入一个合法的分数')
    } else {
        // 当成绩为100时,'奖励一辆BMW'
        if (score === 100) {
            alert('汽车一辆~')
        } else if (score >= 80) {
            // 当成绩为[80-99]时,'奖励一台iphone'
            alert('手机一台~')
        } else if (score >= 60) {
            // 当成绩为[60-79]时,'奖励一本参考书'
            alert('参考书一本~')
        } else {
            // 其他时,什么奖励也没有
            alert('啥也没有~')
        }
    }
    
  3. 大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:,高:180cm以上; 富:1000万以上; 帅:500以上;,如果这三个条件同时满足,则:‘我一定要嫁给他’,如果三个条件有为真的情况,则:‘嫁吧,比上不足,比下有余。’,如果三个条件都不满足,则:‘不嫁!’

    // 获取男生的数据(身高、财富、颜值)
    let height = +prompt('请输入你的身高(厘米):')
    let money = +prompt('请输入你的身价(万):')
    let face = +prompt('请输入你的颜值(像素):')
    
    // height 180↑  money 1000↑ face 500↑
    if (height > 180 && money > 1000 && face > 500) {
        // 如果这三个条件同时满足,则:'我一定要嫁给他'
        alert('我一定要嫁给他!')
    } else if (height > 180 || money > 1000 || face > 500) {
        // 如果三个条件有为真的情况,则:'嫁吧,比上不足,比下有余。'
        alert('嫁吧,比上不足,比下有余。')
    } else {
        // 如果三个条件都不满足,则:'不嫁!'
        alert('不嫁!')
    }
    

4 Switch语句

  • 语法:
switch(表达式){
    case 表达式:
        代码...
        break
    case 表达式:
        代码...
        break
    case 表达式:
        代码...
        break
    case 表达式:
        代码...
        break
    default:
        代码...
        break
}
  • 执行的流程
    • switch语句在执行时,会依次将switch后的表达式和case后的表达式进行全等比较
      • 如果比较结果为true,则自当前case处开始执行代码

      • 如果比较结果为false,则继续比较其他case后的表达式,直到找到true为止

      • 如果所有的比较都是false,则执行default后的语句

  • 注意:
    • 当比较结果为true时,会从当前case处开始执行代码
      • 也就是说case是代码执行的起始位置
    • 这就意味着只要是当前case后的代码,都会执行
    • 可以使用break来避免执行其他的case
  • 总结
    • switch语句和if语句的功能是重复,switch能做的事if也能做,反之亦然。

    • 它们最大的不同在于,switch在多个全等判断时,结构比较清晰

例子:根据用户输入的数字显示中文

let num = +prompt("请输入一个数字")
/* 
    1 壹
    2 贰
    3 叁
*/
switch (num) {
    case 1:
        alert("壹")
        break // break可以用来结束switch语句
    case 2:
        alert("贰")
        break
    case 3:
        alert("叁")
        break
    default:
        alert("我是default")
        break
}

使用if实现同样的功能

// 根据用户输入的数字显示中文
let num = +prompt("请输入一个数字")
/* 
    1 壹
    2 贰
    3 叁
*/
if (num === 1) {
    alert("壹")
} else if (num === 2) {
    alert("贰")
} else if (num === 3) {
    alert("叁")
}

5 循环语句

通过循环语句可以使指定的代码反复执行

JS中一共有三种循环语句

  • while语句
  • do-while语句
  • for语句

通常编写一个循环,要有三个要件

  1. 初始化表达式(初始化变量)
  2. 条件表达式(设置循环运行的条件)
  3. 更新表单式(修改初始化变量)

5.1 While循环

  • 语法:

    while(条件表达式){
    	语句...
    }
    
  • 执行流程:

    • while语句在执行时,会先对条件表达式进行判断,
      • 如果结果为true,则执行循环体,执行完毕,继续判断
      • 如果为true,则再次执行循环体,执行完毕,继续判断,如此重复
      • 知道条件表达式结果为false时,循环结束

死循环:当一个循环的条件表达式恒为true时,这个循环就是一个死循环,会一直执行(慎用)

let i = 0		// 初始化表达式
while(i < 5){		// 条件表达式
    console.log(i)
    i++			// 更新表达式
}

// 上面的循环等价于:
let i = 0
while(1){
    console.log(i)
    i++

    if(i >= 5){
        break
    }
}

练习:假设银行存款的年利率为5%,问1000块存多少年可以变成5000块

// 创建一个变量表示钱数
let money = 1000

// 创建一个计数器来记录循环执行的次数
let year = 0

// 编写循环,计算存款的年数
while(money < 5000){
    money *= 1.05 // 循环没执行一次,就相当于钱存了一年
    year++
}

console.log(`需要存${year}年,最终的钱数为${money}元!`)

5.2 do-while循环

  • 语法

    do{
        语句...
    }while(条件表达式)
    
  • 执行顺序:

    • do-while语句在执行时,会先执行do后的循环体,执行完毕后,会对while后的条件表达式进行判断
      • 如果为false,则循环终止
      • 如果为true,则继续执行循环体,以此类推
  • 和while的区别:

    • while语句是先判断再执行
    • do-while语句是先执行再判断
    • 实质的区别:
      • do-while语句可以确保循环至少执行一次
let i = 10
do{
    console.log(i)
    i++
}while(i < 5)
    
// 等价以下while循环
let i = 10
while(i < 5){
    console.log(i)
    i++
}

5.3 for循环

for循环和while没有本质区别,都是用来反复执行代码

不同点就是语法结构,for循环更加清晰

  • 语法:

    for(①初始化表达式; ②条件表达式; ④更新表达式){
    	③语句...
    }
    
  • 执行流程:
    ① 执行初始化表达式,初始化变量
    ② 执行条件表达式,判断循环是否执行(true执行,false终止)
    ③ 判断结果为true,则执行循环体
    ④ 执行更新表达式,对初始化变量进行修改
    ⑤ 重复②,直到判断为false为止

  • 初始化表达式,在循环的整个的生命周期中只会执行1次

  • for循环中的三个表达式都可以省略

    • 使用let在for循环的()中声明的变量是局部变量,只能在for循环内部访问
    • 使用var在for循环的()中声明的变量可以在for循环的外部访问
  • 创建死循环的方式:

    • while(1){}
    • for(;;){}
for(let i=0; i<5; i++){
    console.log(i)
}

5.4 嵌套循环

在循环中也可以嵌套其他的循环

示例一:

for (let i = 0; i < 5; i++) {
    for (let j = 0; j < 5 - i; j++) {
        document.write("*&nbsp;&nbsp;")
    }

    document.write("<br>")
}

image-20221130185853455

示例二:

for (let i = 0; i < 5; i++) {
    for (let j = 0; j < i + 1; j++) {
        document.write("*&nbsp;&nbsp;")
    }

    document.write("<br>")
}

image-20221130185906370

示例三:

for (let i = 0; i < 5; i++) {
    // 创建一个内层循环来控制图形的宽度
    for (let j = 0; j < 5; j++) {
        document.write("*&nbsp;&nbsp;")
    }

    document.write("<br>")
}

image-20221130185940203

6 break和continue

6.1 break

  • break用来终止switch和循环语句
  • break执行后,当前的switch或循环会立刻停止
  • break会终止continue用来跳过当次循环
for (let i = 0; i < 5; i++) {
    if (i === 3) {
        break
    }
    console.log(i)
}

6.2 continue

continue用来跳过当次循环

for (let i = 0; i < 5; i++) {
    if (i === 3) {
        continue
    }
    console.log(i)
}

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

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

相关文章

PTL智能拣货系统

一、PTL背景介绍 随着工业 4.0 理念持续扩展并被接受&#xff0c;智能制造将是中国制造业发展趋势。未来的生产企业不仅仅在生产过程中追求智能化&#xff0c;仓储、工具、设备智能化管理都会成为新的趋势。 现阶段物流仓储行业进入了一个快速的发展期&#xff0c;各种各样的…

辣椒疫霉RXLR效应子抑制植物免疫

文章信息 题目&#xff1a;A Phytophthora capsici RXLR effector targets and inhibits the central immune kinases to suppress plant immunity 刊名&#xff1a;New Phytologist 作者&#xff1a;Xiangxiu Liang&#xff0c;Daolong Dou et al. 单位&#xff1a;China …

微信无感知检测单项好友【WeTool 免费版】【微信如何检测单向好友?】

一.微信无感知检测单项好友 1.1 背景 因为最近业务的原因加了好多的陌生微信好友&#xff0c;难免有很多好友删了我&#xff0c;但是我还有他的微信&#xff0c;岂不是很占地方&#xff1f; 所以我琢磨如何检测这些单项好友【利用转账、拉群的方法太费时间】&#xff0c;我无…

[附源码]计算机毕业设计springboot拉勾教育课程管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

事件绑定(onclick,onfocus,onblur)

事件绑定(onclick,onfocus,onblur) 学习路线&#xff1a;JavaScript_DOM->事件绑定(onclick,onfocus,onblur)-> 事件绑定(onmouseout,onmouseover) ->事件绑定(onsubmit)表单提交 ->提交表单与验证表单案例 常用绑定方式 方式一&#xff1a;通过 HTML标签中的事…

Java Hash 碰撞

散列函数&#xff08;英语&#xff1a;Hash function&#xff09;又称散列算法、哈希函数&#xff0c;是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要&#xff0c;使得数据量变小&#xff0c;将数据的格式固定下来。 该函数将数据打乱混合…

获取windows硬件、软件信息的方法

1&#xff0c;方法1 systeminfo 该命令是Windows中用于显示关于计算机及其操作系统的详细配置信息&#xff0c;包括操作系统配置、安全信息、产品 ID 和硬件属性&#xff0c;如 RAM、磁盘空间和网卡和补丁信息等。 SYSTEMINFO [/S system [/U username [/P [password]]]] [/FO…

从阿里降薪百分之三十来了国企,没想到还是要加班!哭了!

从阿里进国企&#xff0c;图什么&#xff1f;图它降工资&#xff1f;图它技术强&#xff1f;当然是图它轻松不加班&#xff0c;稳定不裁员&#xff01;但如果像下面这位阿里程序员一样&#xff0c;降薪百分之三十进了国企&#xff0c;发现还是得加班&#xff0c;大概只能emo了.…

[附源码]Python计算机毕业设计Django的文成考研培训管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

Ae 动态图形模板

哈喽&#xff0c;各位小伙伴&#xff01;今天我们来学习一下如何通过AePr导出和安装动态图形模板&#xff1f; 新建合成 首先&#xff0c;新建一个合成&#xff0c;然后点击文字工具&#xff0c;内容自定义&#xff08;例&#xff1a;一场彗星雨&#xff0c;隔断了时空&#…

【408篇】C语言笔记-第九章(数据结构概述)

文章目录第一节&#xff1a;逻辑结构与存储结构1. 逻辑结构2. 存储结构1. 顺序存储2. 链式存储3. 顺序存储与链式存储分析第二节&#xff1a;算法的评价&#xff08;时间复杂度与空间复杂度&#xff09;1. 算法定义2. 时间复杂度3. 空间复杂度第一节&#xff1a;逻辑结构与存储…

CentOS7安装GmSSL过程记录

近期因为项目需要上区块链&#xff0c;在集成过程中证书选择了国密SM2&#xff0c;于是开启了入坑之旅&#xff0c;由于整个过程反复多次&#xff0c;我的记录也可能存在遗漏&#xff0c;只能尽力记录&#xff0c;这也是我为什么熬夜也要写下这篇记录&#xff01; 环境说明Virt…

[附源码]Python计算机毕业设计Django的玉石交易系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

【Pandas数据处理100例】(九十三):Pandas使用all()函数判断DataFrame中的元素是否都为True

前言 大家好,我是阿光。 本专栏整理了《Pandas数据分析处理》,内包含了各种常见的数据处理,以及Pandas内置函数的使用方法,帮助我们快速便捷的处理表格数据。 正在更新中~ ✨ 🚨 我的项目环境: 平台:Windows10语言环境:python3.7编译器:PyCharmPandas版本:1.3.5N…

数据库事务、连接与java线程之间的关系

最近在处理事务和多线程时&#xff0c;比较困扰数据库事务&#xff0c;数据库连接以及java线程之间的关系。 问题1&#xff1a;事务和连接的关系&#xff1f; 回答&#xff1a;对于数据库事务来说先有一个连接&#xff0c;才能有事务&#xff0c;一个连接里可以有一次或多次事…

[附源码]计算机毕业设计SpringBoot计算机相关专业考研资料管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

二叉树的遍历与构建问题

目录 一、二叉树遍历 二、从前序与中序遍历序列构造二叉树 三、从中序遍历与后序遍历序列构造二叉树 一、二叉树遍历 编一个程序&#xff0c;读入用户输入的一串先序遍历字符串&#xff0c;根据此字符串建立一个二叉树&#xff08;以指针方式存储&#xff09;。 例如如下的…

卡塔尔世界杯壁纸已上线,下载的壁纸清晰度不够?教你修复清晰

当我们无法走入现场感受这场体育盛宴&#xff0c;就用一张张世界杯壁纸回味世界杯的动人瞬间吧&#xff0c;在家云看球&#xff0c;换上卡塔尔世界杯壁纸&#xff0c;用上表情包一样可以过把瘾&#xff0c;一起看看如何获得卡塔尔世界杯的壁纸和表情包吧&#xff01; 如何获得…

基于PLC的矿泉水自动瓶装控制系统设计

目 录 1 绪论 1 1.1研究背景及意义 1 1.2研究现状 2 1.2.1 可编程序逻辑控制器 2 1.2.2 我国自动瓶装存在的问题 2 1.3研究主要内容 3 2 矿泉水自动瓶装总体设计 5 2.1任务的分析 5 2.2硬件方案设计 5 2.3软件方案设计 6 2.3.1经验设计法 6 2.3.2逻辑设计法 6 3 元件器件选择 8…

[附源码]SSM计算机毕业设计学术文献分享网站JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…