● 咱们的 js 代码都是程序执行的(从上到下)
● 个别状况下程序是按自上而下的程序顺次执行或者在不思考优先级的前提下从左向右顺次执行,咱们称之为程序执行
// 1. 自上而下let x = 10;let y = 2;console.log(a + b);// 2. 从左向右console.log(a); console.log(b);// 优先级破环了失常的执行程序console.log(3 + 2 * 4)
● 条件管制(逻辑分支)就是依据咱们设定好的条件来控制程序执行的形式,JavaScript 提供了3种条件管制的语法反对:
○ if条件分支构造
○ switch条件分支构造
○ 三元运算符
if 条件分支构造(重点)
● 能够依据条件决定是否执行否一段代码
● 或者在多段代码之间抉择一段代码执行
● 留神: 条件分支语句不能反复执行
● if 语句多用于范畴性的条件判断
if 语句—单分支
● 通过一个 if 语句来决定代码是否执行
● 语法:
○ if (条件) { 要执行的代码段 }
● 通过 () 外面的条件是否成立来决定 {} 外面的代码是否执行
● 如果 () 外面的条件为真,也就是true,才会执行大括号外面的代码段
// 条件为 true 的时候执行 {} 外面的代码if (true) { console.log('因为条件是 true,我会执行')}// 条件为 false 的时候不执行 {} 外面的代码if (false) { console.log('因为条件是 false,我不会执行')}
● 示例 :
var age = 18// var age = 16if (age >= 18) { console.log('你成年了');}
if else 语句—双分支
● 通过 if 条件来决定,执行哪一个 {} 外面的代码
● 语法:
○ if (条件) { 条件为 true 的时候执行 } else { 条件为 false 的时候执行 }
● 如果if前面的小括号内的条件成立,也就是true,那么就执行if前面的大括号外面的代码
● 如果 if 前面的小括号内的条件不成立,也就是 false ,那就就执行else 前面的大括号外面的代码
● 两个 {} 内的代码肯定有一个会执行,有且只有一个能执行
// 条件为 true 的时候,会执行 if 前面的 {}if (true) { alert('因为条件是 true,我会执行')} else { alert('因为条件是 true,我不会执行')}// 条件为 false 的时候,会执行 else 前面的 {}if (false) { alert('因为条件为 false,我不会执行')} else { alert('因为条件为 false,我会执行')}
● 示例 :
var age = 18// var age = 16if (age >= 18) { console.log('你成年了');} else { console.log('你还未成年');}
if else if ... 语句—多分支
● 能够通过 if 和 else if 来设置多个条件进行判断
● 语法:
○ if (条件1) { 条件1为 true 时候执行 } else if (条件2) { 条件2为 true 时候执行 }
● 会从头开始顺次判断条件
● 如果第一个条件为 true 了,那么就会执行前面的 {} 外面的内容
● 如果第一个条件为 false,那么就会判断第二个条件,顺次类推
● 多个 {} ,最多会有一个被执行,一旦有一个条件为 true 了,前面的就不在判断了
// 第一个条件为 true,第二个条件为 false,最终会打印 “我是代码段1”if (true) { alert('我是代码段1')} else if (false) { alert('我是代码段2')}// 第一个条件为 true,第二个条件为 true,最终会打印 “我是代码段1”// 因为只有后面有一个条件满足了,就不会持续判断了if (true) { alert('我是代码段1')} else if (true) { alert('我是代码段2')}// 第一个条件为 false,第二个条件为 true,最终会打印 “我是代码段2”// 只有前一个条件为 false 的时候才会持续向后判断if (false) { alert('我是代码段1')} else if (true) { alert('我是代码段2')}// 第一个条件为 false,第二个条件为 false,最终什么也不会产生// 因为当所有条件都为 false 的时候,两个 {} 外面的代码都不会执行if (false) { alert('我是代码段1')} else if (false) { alert('我是代码段2')}
if else if … else 语句—多分支
● 和之前的 if else if ... 基本一致,只不过是在所有条件都不满足的时候,执行最初 else 前面的 {}
// 第一个条件为 false,第二个条件为 false,最终会打印 “我是代码段3”// 只有后面所有的条件都不满足的时候会执行 else 前面的 {} 外面的代码// 只有后面有一个条件满足了,那么前面的就都不会执行了if (false) { alert('我是代码段1')} else if (false) { alert('我是代码段2')} else { alert('我是代码段3')}
总结
● if 或 else if 的条件存在数据隐式类型的转换
● else 只能跟在 if 或 else if,之后,从语法角度看 else 能够省略
● 反对嵌套
逻辑运算符 && 和 || 的优先级问题
● 逻辑运算符 && 和 || 同时呈现的的状况下有以下几种状况
○ 从左往右顺次执行
○ 优先执行&&
○ 优先执行||
● 证实
○ 步骤1 : 要么是 从左向右, 要么是先 &&
if (false && true || true && true) { console.log('我执行了')}/* 剖析: 如果 console.log('我执行了'); 能执行 阐明if小括号中的条件为真 从左向右执行 false && true || true && true false || true && true true && true true 先执行逻辑或 false && true || true && true false && true && true false && true false 先执行逻辑与 false && true || true && true false || true && true false || true true*/
步骤2 : 排除了从左向右
if (true || false && false) { console.log('我也执行了')}/* 剖析: 如果 console.log('我也执行了');能执行,阐明if小括号中的条件为真 从左向右执行 true || false && false true && false false 先执行逻辑与 true || false && false true || false true*/
switch 条件分支构造(重点)
● 也是条件判断语句的一种
● 是对于某一个变量的判断
● 应用与对某个值的精确判断
● 语法:
switch (要判断的变量) { case 状况1: 状况1要执行的代码 break case 状况2: 状况2要执行的代码 break case 状况3: 状况3要执行的代码 break default: 上述情况都不满足的时候执行的代码}
○ 要判断某一个变量 等于 某一个值得时候应用
○ 留神:
■ 要判断的变量, 必须和 case 前面的内容是 ===后果为 true 才叫做满足,也就是 数据类型 和 值 必须一样才行
■ switch 的判断, 只能判断精确的等于哪一个值, 不能进行范畴的判断,也不能进行逻辑运算的判断
■ default 能够写, 能够不写。不写的时候, 就是所有条件都不满足, 就没有代码执行
■ break 必须要书写, 如果不写 break, 那么就会进行穿透
■ 穿透, 下一个 case 不论是不是满足, 都会间接执行代码, 直到 switch 完结或者遇到 break 为止
■ 穿透的时候, 会从第一个满足条件的case开始向下穿透
○ 但凡可应用 switch 的逻辑,均能够应用 if 实现
● 例子: 依据变量给出的数字显示是星期几
var week = 1switch (week) { case 1: alert('星期一') break case 2: alert('星期二') break case 3: alert('星期三') break case 4: alert('星期四') break case 5: alert('星期五') break case 6: alert('星期六') break case 7: alert('星期日') break default: alert('请输出一个 1 ~ 7 之间的数字')}
案例: 依据月份失去每一个月中有多少天, 不思考平年的状况
● 失常实现
// 定义一个变量用来示意月份var month = 1// 应用switch 语句来判断switch (month) { case 1: console.log('31天'); break case 2: console.log('28天'); break case 3: console.log('31天'); break case 4: console.log('30天'); break case 5: console.log('31天'); break case 6: console.log('30天'); break case 7: console.log('31天'); break case 8: console.log('31天'); break case 9: console.log('30天'); break case 10: console.log('31天'); break case 11: console.log('30天'); break case 12: console.log('31天'); break}
● 利用穿透来实现
// 利用穿透成果来实现// 定义一个变量用来示意月份var month = 1// 应用switch 语句来判断switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: console.log('31天'); break case 4: case 6: case 9: case 11: console.log('30天'); case 2: console.log('28天'); break}
案例:依据给定的月年日,计算出是一年中的多少天
// 定变量var year = 2021var month = 12var data = 31// 定义一个变量 用于接管咱们的总天数var day = 0switch (month) { case 12: day += 31 case 11: day += 30 case 10: day += 31 case 9: day += 30 case 8: day += 31 case 7: day += 31 case 6: day += 30 case 5: day += 31 case 4: day += 30 case 3: day += 31 case 2: // 这里咱们是不是能够思考二月份的状况 if (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0 day += 29 } else { day += 28 }}// 这里是不是下面的月份累加完了加上咱们的几天day += dataconsole.log(day);
三元运算(三元表达式)
● 三元运算,就是用 两个符号 组成一个语句
● 三元运算只是对 if else 语句的一个简写模式
● 语法:
○ 条件 ? 条件为 true 的时候执行 : 条件为 false 的时候执行
var age = 18;age >= 18 ? alert('曾经成年') : alert('没有成年')
● 留神 :
○ 每一个代码执行区间, 只能书写一句话
10 < 20 ? console.log('a') : console.log('b')
○ 只能简写 if else 语句
// 简写 if elsevar age = 15age >= 18 ? console.log('学车') : ''// 等价于if (age >= 18) { console.log('学车')} else {}
● 能够用来执行代码, 也能够用来赋值
// 三元表达式赋值var gender = 1var sex = gender % 2 === 0 ? '女' : '男'console.log(sex)//等价于if (gender % 2 === 0) { var sex = '女'} else { var sex = '男'}