JavaScript流程控制详解之顺序结构和选择结构

流程控制

流程控制,指的是控制程序按照怎样的顺序执行

在JavaScript中,共有3种流程控制方式

  • 顺序结构
  • 选择结构
  • 循环结构

顺序结构

在JavaScript中,顺序结构是最基本的结构,所谓的顺序结构,指的是代码按照从上到下、从左到右的顺序执行

JavaScript执行的顺序结构如图所示
在这里插入图片描述

示例

<script>var str="hello";var str1=" world";var str2=str+str1;console.log(str2);
</script>

运行结果

hello world

按照从上到下、从左到右的顺序,JavaScript会按照以下顺序执行

  1. 执行 var str=“hello”;
  2. 执行 var str1=" world";
  3. 执行 var str2=str+str1;
  4. 最后执行console.log(str2);

一般情况下,JavaScript引擎就是按照顺序结构来执行的。但有时单独使用顺序结构可能无法解决问题,所以就引用了选择结构和循环结构

选择结构

在JavaScript中,选择结构指的是根据条件判断是否为真假来决定执行哪一段代码。

选择结构有:

  1. if分支语句
  2. switch语句

if 单向选择

语法形式:

if(condition) {// 满足条件要执行的语句statement;
}

怎么运行的?

  • condition可以是一个值或一个表达式,它的计算结果为布尔值。

  • condition值结果是布尔值,为 true 时,则会执行大括号中{}内部的代码;如果值结果为false,则直接跳过大括号{}内部的代码,然后按照顺序执行后面的程序

  • 如果condition计算结果若不是布尔类型时,JavaScript引擎会自动调用Boolean()函数将其结果隐式转换为布尔值。

  • 如果大括号只有一个语句,大括号可以省略

if单向选择工作原理如图
在这里插入图片描述

示例:

<script>//单向选择ifif(true){console.log("条件结果为true就执行此代码");}//1.如果大括号内只有一个语句,大括号可省略if(true)console.log("省略大括号");//2.条件为trueif(5>2){console.log("5大于2");}if(10=="10"){console.log("10=='10'");}//3.条件为falseif(10==="10"){console.log("10==='10'为true时执行此代码");}console.log("10不等于'10'时执行此代码");//4. 除了0 所有的数字都为真if(0){console.log("数字0为true时执行此代码");}console.log("0为false");//5.除了 '' 所有的字符串都为真 trueif("真"){console.log("字符串为真");}if(""){console.log("执行此代码");}console.log("空字符串为false");</script>

运行结果

条件结果为true就执行此代码
省略大括号
5大于2
10=='10'
10不等于'10'时执行此代码
0false
字符串为真
空字符串为false

条件表达式结果为false的值

  • false

  • undefined

  • null

  • 除了0 所有的数字都为真

  • NaN

  • 除了 ‘’ 所有的字符串都为真 true

if 双向选择

如果有两个条件的时候,可以使用 if else 双分支语句。当一个逻辑条件为真,用if语句来执行一个语句,当这个条件为假时,使用可选择的else从句来执行这个语句
语法形式:

if (condition){// 满足条件要执行的语句statement1;
} else {// 不满足条件要执行的语句statement2;
}

怎么运行的?

  • condition可以是任何返回结果为true或false的表达式。

  • 如果condition计算结果返回的是true,statement1语句会被执行;否则,statement2被执行。如果计算结果为非布尔值,则该if…else语句会将其转换为布尔值

  • statement1和statement2可以是任何语句,甚至还可以将一个if语句嵌套其中。

if双向选择工作原理如图
在这里插入图片描述

示例

<script>//1.保存信息var usname=prompt("请输入你的用户名");var pwd=prompt("请输入你的密码");//2.判断条件if(usname === "tom" && pwd === "123456"){alert("恭喜登录成功");}else{alert("用户名或密码输入错误");}
</script>

运行结果
在这里插入图片描述

if 多向选择

if 多向选择,就是在双向选择的基础上增加单个或多个选择分支

语法形式:

if(condition1){// 满足条件要执行的语句statement1;}   
else if(condition2)
{// 满足条件要执行的语句statement2;
}else if(condition3){// 满足条件要执行的语句statement3;}
...
else if(conditionn)
{// 满足条件要执行的语句statement n;
}
else{//当以上条件都不满足时就执行此代码
}

怎么运行的?

  • if…else if…else语句会从上到下进行检查条件,如果条件为true则执行相应的语句
  • if…else if…else语句中有condition一旦条件为true,该语句就会停止检查其余condition计算结果。例如,如果condition2计算结果为true,则只会执行这语句,不会计算其他condition,执行完毕condition2内的statement2代码则会直接退出if…else if…else选择结构语句
  • 如果所有条件均为false,则该if…else if…else语句执行分支中的else语句中的代码

if 多向选择工作原理如下图所示
在这里插入图片描述

示例:

<script>var grade=prompt("请输入你的成绩");if(grade>=90){alert("你的成绩为优秀");}else if(grade>=80){alert("你的成绩为良好");}else if(grade>=70){alsert("你的成绩为中等");}else if(grade>=60){alert("你的成绩为合格");}else{alert("你的成绩为不合格");}
</script>

运行结果
在这里插入图片描述

对于多向选择,JavaScript会从第一个if条件开始判断,如果第一个不满足,则会判断第二个if条件;如果还是不满足,则判断第三个if条件,直到满足条件为止。一旦满足,就会跳出整个if结构

switch语句

switch语句会根据条件判断的计算结果,将其结果与case值进行比较,然后执行与匹配值关联的语句case

语法形式:

switch(expression){case 取值1:statement1;[break;]case 取值1:statement1;[break;].....case 取值n:statementn;[break;]default:statement;}

怎么运行的

  • 首先,计算switch选择结构中的expression结果

  • 其次,将表达式的结果与从上到下的case分支中的取值1、取值2,…进行比较。switch语句使用严格比较(===

  • 第三,执行case分支中的语句,其中expression表达式的结果等于case关键字后面的值。break语句退出switch语句。如果跳过break语句,代码执行会从原始case分支进入下一分支。如果表达式中的结果不严格等于任何值,switch语句将执行default分支中的语句

  • 只要找到匹配项,switch语句就会停止将表达式的结果与剩余的case值进行比较

switch语句结构工作原理
在这里插入图片描述

注意:

  1. switch case语句一般用于等值判断, if适合于区间判断
  2. switchcase一般需要配合break关键字使用 没有break会造成case穿透
  3. if 多分支语句开发要比switch更重要,使用也更多

示例:

<script>var day =5;var dayName;switch (day) {case 7:dayName = '今天是星期日';break;case 1:dayName = '今天是星期一';break;case 2:dayName = '今天是星期二';break;case 3:dayName = '今天是星期三';break;case 4:dayName = '今天是星期四';break;case 5:dayName = '今天是星期五';break;case 6:dayName = '今天是星期六';break;default:dayName = '输入错误';}alert(dayName);</script>

运行结果

今天是星期五

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

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

相关文章

上海亚商投顾:沪指涨超3% 深成指和创指双双飙涨超6%

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 今日A股三大指数一改近期低迷状态&#xff0c;早盘小幅低开后一路高歌猛进集体大涨&#xff0c;沪指涨超3%&am…

锁(二)队列同步器AQS

一、队列同步器AQS 1、定义 用来构建锁或者其他同步组件的基础框架&#xff0c;它使用了一个int成员变量表示同步状态&#xff0c;通过内置的FIFO队列来完成资源获取线程的排队工作。是实现锁的关键。 2、实现 同步器的设计是基于模板方法模式的&#xff0c;也就是说&#…

如何安装x11vnc并结合cpolar实现win远程桌面Deepin

文章目录 1. 安装x11vnc2. 本地远程连接测试3. Deepin安装Cpolar4. 配置公网远程地址5. 公网远程连接Deepin桌面6. 固定连接公网地址7. 固定公网地址连接测试 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&#xff…

11.0 Zookeeper watcher 事件机制原理剖析

zookeeper 的 watcher 机制&#xff0c;可以分为四个过程&#xff1a; 客户端注册 watcher。服务端处理 watcher。服务端触发 watcher 事件。客户端回调 watcher。 其中客户端注册 watcher 有三种方式&#xff0c;调用客户端 API 可以分别通过 getData、exists、getChildren …

GLSL ES 1.0

GLSL ES 概述 写在前面 程序是大小写敏感的每一个语句都应该以英文分号结束一个shader必须包含一个main函数&#xff0c;该函数不接受任何参数&#xff0c;并且返回voidvoid main() { }数据值类型 GLSL支持三种数据类型&#xff1a; 整型浮点型&#xff1a;必须包含小数点&…

python 动态显示数据。

界面显示动态的数据。 from time import sleep import serialimport tkinter as tklis[1,10,40] # 打开串行端口 ser serial.Serial(COM3, 9600) # 9600为波特率&#xff0c;根据实际情况进行调整# 创建窗口和画布 window tk.Tk() canvas tk.Canvas(window, width400, heig…

高阶滤波器

一阶后向差分&#xff1a;s&#xff08;1-z^(-1)&#xff09;/T dx/dt[x(k)-x(k-1)]/T[x(k)-x(k)z^(-1)]/Tx(k)*&#xff08;1-z^(-1)&#xff09;/T 一阶前向差分&#xff1a;s(z-1)/T dx/dt[x(k1)-x(k)]/T[z*x(k)-x(k)]/Tx(k)*(z-1)/T 双线性差分&#xff1a;s(2/T)*(1-z…

通过 docker-compose 部署 Flink

概要 通过 docker-compose 以 Session Mode 部署 flink 前置依赖 Docker、docker-composeflink 客户端docker-compose.yml version: "2.2" services:jobmanager:image: flink:1.17.2ports:- "8081:8081"command: jobmanagervolumes:- ${PWD}/checkpoin…

【大模型上下文长度扩展】FlashAttention:高效注意力计算的新纪元

FlashAttention&#xff1a;高效注意力计算的新纪元 核心思想核心操作融合&#xff0c;减少高内存读写成本分块计算&#xff08;Tiling&#xff09;&#xff0c;避免存储一次性整个矩阵块稀疏注意力&#xff0c;处理长序列时的效率问题利用快速 SRAM&#xff0c;处理内存与计算…

【大模型上下文长度扩展】LongQLoRA:单GPU(V100)环境下的语言模型优化方案

LongQLoRA 核心问题子问题1: 预定义的上下文长度限制子问题2: 训练资源的需求高子问题3: 保持模型性能分析不足 LongQLoRA方法拆解子问题1: 上下文长度限制子问题2: 高GPU内存需求子问题3: 精确量化导致的性能损失分析不足效果 论文&#xff1a;https://arxiv.org/pdf/2311.048…

docker镜像结构

# 基础镜像 FROM openjdk:11.0-jre-buster # 设定时区 ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 拷贝jar包 COPY docker-demo.jar /app.jar # 入口 ENTRYPOINT ["java", "-jar"…

游泳耳机推荐性价比排行榜,四大高性价比游泳耳机推荐

随着运动健康意识的提高&#xff0c;越来越多的朋友选择在游泳馆进行锻炼。然而&#xff0c;在水中享受音乐并非易事&#xff0c;这就需要一款真正防水的耳机。尽管市面上有许多声称具备防水功能的耳机产品&#xff0c;但实际使用中往往难以达到理想的防水效果。为了帮助大家找…

之前看过的前序遍历的线索二叉树感觉写的有点问题 这里更新一下我的思路

前序线索化 #include<iostream> using namespace std;typedef int datatype; typedef struct BitNode {datatype Data;struct BitNode* leftchild;struct BitNode* rightchild;int lefttag;int righttag; }Node; #pragma region 前序线索化递归遍历 Node* previous NUL…

maven依赖报错处理(或者maven怎么刷新都下载不了依赖)

maven依赖报错&#xff0c;或者不报错&#xff0c;但是怎么刷新maven都没反应&#xff0c;可以试一下以下操作 当下载jar的时候&#xff0c;如果断网&#xff0c;或者连接超时的时候&#xff0c;会自动在文件夹中创建一个名为*lastupdate的文件&#xff0c;当有了这个文件之后…

网络工程师专属春节对联,不要太真实了!

中午好&#xff0c;我的网工朋友。 都放假了没&#xff1f;龙年将至&#xff0c;都有啥新年计划&#xff1f; 过年&#xff0c;讲究的就是一个热闹&#xff0c;可以暂时告别辛苦的一年&#xff0c;重新整装出发。 热闹可少不了春联啊&#xff0c;红红火火又一年&#xff0c;…

Vue源码系列讲解——虚拟DOM篇【一】(Vue中的虚拟DOM)

目录 1. 前言 2. 虚拟DOM简介 2.1什么是虚拟DOM&#xff1f; 2.2为什么要有虚拟DOM&#xff1f; 3. Vue中的虚拟DOM 3.1 VNode类 3.2 VNode的类型 3.2.1 注释节点 3.2.2 文本节点 3.2.3 克隆节点 3.2.4 元素节点 3.2.5 组件节点 3.2.6 函数式组件节点 3.2.7 小结 3…

OpenCV-31 获得形态学卷积核

OpenCV提供了获取卷积核的API&#xff0c;不需要我们手动创建卷积核。 通过下面API---getStructuringElement(shape&#xff0c;ksize&#xff0c;[, anchor]) shape是指卷积核的型状&#xff0c;注意不是指长宽&#xff0c;是指卷积核中1形成的形状。MORPH_RECT 卷积核中的1…

(三)elasticsearch 源码之启动流程分析

https://www.cnblogs.com/darcy-yuan/p/17007635.html 1.前面我们在《&#xff08;一&#xff09;elasticsearch 编译和启动》和 《&#xff08;二&#xff09;elasticsearch 源码目录 》简单了解下es&#xff08;elasticsearch&#xff0c;下同&#xff09;&#xff0c;现在我…

SPSS基础操作:对数据进行加权处理

对数据进行加权处理是我们使用SPSS提供某些分析方法的重要前提。对数据进行加权后&#xff0c;当前的权重将被保存在数据中。当进行相应的分析时&#xff0c;用户无须再次进行加权操作。本节以对广告的效果观测为例&#xff0c;讲解数据的加权操作。本例给出了消费者购买行为与…

Arthas使用教程—— 阿里开源线上监控诊断产品

文章目录 1 简介2背景3 图形界面工具 arthas 阿里开源3.1 &#xff1a;启动 arthas3.2 help :查看arthas所有命令3.3 查看 dashboard3.4 thread 列出当前进程所有线程占用CPU和内存情况3.5 jvm 查看该进程的各项参数 &#xff08;类比 jinfo&#xff09;3.6 通过 jad 来反编译 …