1. 程序的执行顺序和代码块
1.1 执行顺序
在程序开发中,程序有三种不同的执行方式:
- 顺序 —— 从上向下,顺序执行代码
- 分支 —— 根据条件判断,决定执行代码的 分支
- 循环 —— 让 特定代码 重复 执行
1.2 代码块
-
代码块是多行执行代码的集合,通过一个花括号
{}放到了一起// 一个代码块 { var num1 = 10 var num2 = 20 var result = num1 + num2 } // 一个对象 var info = { name: "kobe", age: 18 } -
在JavaScript中,通过流程控制语句来决定如何执行一个代码块:
- 通常会通过一些关键字来告知js引擎代码要如何被执行,比如分支语句、循环语句对应的关键字等
2. if分支语句
- if语句的使用
- 案例
- 补充:
- 如果只有一行代码, {}可以省略
- if (条件判断)的隐式转换;
2.1 单分支结构 if..
-
if(...) 语句计算括号里的条件表达式,如果计算结果是 true,就会执行对应的代码块
-
补充
-
如果代码块中只有一行代码,那么
{}可以省略: -
if (…) 语句会计算圆括号内的表达式,并将计算结果转换为布尔型(Boolean)
-
转换规则和Boolean函数的规则一致
-
数字 0、空字符串 “”、null、undefined 和 NaN 都会被转换成 false;它们被称为假值(falsy)
-
其他值被转换为 true,所以它们被称为 真值(truthy)
-
-
2.2 多分支结构 if..else..
2.3 多分支结构 if..else if..else
3. 三元运算符
-
条件运算符:
?- 这个运算符通过问号 ? 表示
- 被称为三元运算符,被称为“三元”是因为该运算符中有三个操作数(运算元)
- 实际上它是 JavaScript 中唯一一个有这么多操作数的运算符
-
使用格式如下:
var result = condition ? value1 : value2;- 计算条件结果,如果结果为真,则返回 value1,否则返回 value2。
4. 逻辑运算符
1.4.1. 逻辑运算符的基本使用
逻辑运算符,主要是由三个:||(或),&&(与),!(非), 它可以将多个表达式或者值放到一起来获取到一个最终的结果
1.4.2. 逻辑或的本质
-
||(或)两个竖线符号表示“或”运算符(也称为短路或):-
从左到右依次计算操作数
-
处理每一个操作数时,都将其转化为布尔值(Boolean)
-
如果结果是 true,就停止计算,返回这个操作数的初始值
-
如果所有的操作数都被计算过(也就是,转换结果都是 false),则返回最后一个操作数
-
-
注意:返回的值是操作数的初始形式,不会转换为Boolean类型。
-
换句话说,一个或运算 || 的链,将返回第一个真值,如果不存在真值,就返回该链的最后一个值。
var result = name || info || "默认值"
1.4.3. 逻辑与的本质
-
&&(或)两个竖线符号表示 “与” 运算符(也称为短路与):-
从左到右依次计算操作数
-
在处理每一个操作数时,都将其转化为布尔值(Boolean)
-
如果结果是 false,就停止计算,并返回这个操作数的初始值(一般不需要获取到初始值)
-
如果所有的操作数都被计算过(例如都是真值),则返回最后一个操作数
-
-
换句话说,与运算 返回第一个假值,如果没有假值就返回最后一个值。
info && info.friend && info.friend.eating && info.friend.eating()
1.4.4. 逻辑非的补充
-
逻辑非运算符接受一个参数,并按如下运算:
-
步骤一:将操作数转化为布尔类型:true/false
-
步骤二:返回相反的值
-
-
两个非运算
!!有时候用来将某个值转化为布尔类型:- 第一个非运算将该值转化为布尔类型并取反,第二个非运算再次取反,最后我们就得到了一个任意值到布尔值的转化。
var message = "Hello World" console.log(Boolean(message)) //true console.log(!!message) // true
5. switch语句
-
switch是分支结构的一种语句:
-
通过判断表达式的结果(或者变量)是否等于case语句的常量,来执行相应的分支体的
-
与if语句不同的是,switch语句只能做值的相等判断(使用全等运算符 ===),而if语句可以做值的范围判断
-
-
switch的语法:
- switch 语句有至少一个 case 代码块和一个可选的 default 代码块
-
case穿透问题:
-
一条case语句结束后,会自动执行下一个case的语句
-
这种现象被称之为case穿透
-
-
break关键字
- 通过在每个case的代码块后添加
break关键字来解决这个问题
// 上一首的按钮: 0 // 播放/暂停的按钮: 1 // 下一首的按钮: 2 var btnIndex = 0 switch (btnIndex) { case 0: console.log("点击了上一首") break case 1: console.log("点击了播放/暂停") // 默认情况下是有case穿透 break case 2: console.log("点击了下一首停") break default: console.log("当前按钮的索引有问题~") break } - 通过在每个case的代码块后添加