表达式是可以被求值的代码,JavaScript 引擎会将其计算出一个结果。(简单理解表达式就是一个式子)
语句是一段可以执行的代码。(比如: prompt() 可以弹出一个输入框)
分支语句
以前我们写的代码,写几句就从上往下执行几句,这种叫顺序结构
有的时候要根据条件选择执行代码,这种就叫分支结构
某段代码被重复执行,就叫循环结构
if分支
if语句有三种使用:单分支、双分支、多分支
单分支
语法:
if(条件){
满足条件执行的代码
}
括号内的条件为true时,进入大括号里执行代码
小括号内的结果若不是布尔类型时,会发生隐式转换转为布尔类型
如果大括号只有一个语句,大括号可以省略,但是,俺们不提倡这么做~
示例代码:
/* 案例*/
// 1. 用户输入
let score = +prompt('请输入成绩')
// 2. 进行判断输出
if (score >= 700) {
alert('恭喜考入清华大学')
}
双分支
语法:
if(条件){
满足条件执行的代码
}else{
不满足条件执行的代码
}
//需求用户输入,用户名:pink,密码:123456, 则提示登录成功,否则提示登录失败
// 示例代码
// 1. 用户输入
let uname = prompt('请输入用户名:')
let pwd = prompt('请输入密码:')
// 2. 判断输出
if (uname === 'pink' && pwd === '123456') {
alert('恭喜登录成功')
} else {
alert('用户名或者密码错误')
}
判断闰年案例
需求:让用户输入年份,判断这一年是闰年还是平年并弹出对应的警示框
分析:
①:能被4整除但不能被100整除,或者被400整除的年份是闰年,否则都是平年
②:需要逻辑运算符
// 1. 用户输入
let year = +prompt('请输入年份')
// 2. 判断输出
if (year % 4 === 0 && year % 100 !== 0 || year % 400 === 0) {
alert(`${year}年是闰年`)
} else {
alert(`${year}年是平年`)
}
多分支
释义:
先判断条件1,若满足条件1就执行代码1,其他不执行
若不满足则向下判断条件2,满足条件2执行代码2,其他不执行
若依然不满足继续往下判断,依次类推
若以上条件都不满足,执行else里的代码n
注:可以写N个条件,但这里演示只写2个
语法:
if(条件1){
代码1
}else if (条件2){
代码2
}else if (条件3){
代码3
}else{
代码n
}
需求:根据输入不同的成绩,反馈不同的评价
注:
①:成绩90以上是 优秀
②:成绩70~90是 良好
③:成绩是60~70之间是 及格
④:成绩60分以下是 不及格
示例代码:
// 1. 用户输入
let score = +prompt('请输入成绩:')
// 2. 判断输出
if (score >= 90) {
alert('成绩优秀,宝贝,你是我的骄傲')
} else if (score >= 70) {
alert('成绩良好,宝贝,你要加油哦~~')
} else if (score >= 60) {
alert('成绩及格,宝贝,你很危险~')
} else {
alert('成绩不及格,宝贝,我不想和你说话。')
}
三元运算符
其实是比 if 双分支更简单的写法,可以使用 三元表达式
语法:
条件 ? 满足条件执行代码1 : 不满足条件执行代码2
// 三元运算符
// 条件 ? 代码1 : 代码2
console.log(3 > 5 ? 3 : 5)
if (3 < 5) {
alert('真的')
} else {
alert('假的')
}
// 三元写法
3 < 5 ? alert('真的') : alert('假的')
//
let sum = 3 < 5 ? 3 : 5
console.log(sum)// 3
求最大值案例
需求:用户输入2个数,控制台输出最大的值
分析:
①:用户输入2个数
②:利用三元运算符输出最大值
// 1. 用户输入
let num1 = +prompt('请您输入第一个数:')
let num2 = +prompt('请您输入第二个数:')
// 2. 判断输出-三元运算符
// if (num1 > num2) {
// alert(num1)
// } else {
// alert(num2)
// }
num1 > num2 ? alert(`最大值是: ${num1}`) : alert(`最大值是: ${num2}`)
/* 需求:用户输入三个数字,找出最大的数字 */
let num1 = +prompt('请输入第一个数字')
let num2 = +prompt('请输入第二个数字')
let num3 = +prompt('请输入第三个数字')
//三元:只能找出两个数字最大数
//res:得到num1和num2中最大的那个数字
let res = num1 > num2 ? num1 : num2
//得到res和num3的最大值
res = res > num3 ? res : num3
console.log(res)
数字补0案例
需求:用户输入1个数,如果数字小于10,则前面进行补0, 比如 09 03 等
分析:
①:为后期页面显示时间做铺垫
②:利用三元运算符 补 0 计算
// 1. 用户输入
let num = prompt('请您输入一个数字:')
// 2. 判断输出- 小于10才补0 不小于10直接是num
num = num < 10 ? 0 + num : num
//num = num >= 10 ? num : 0 + num
alert(num)
switch语句
找到跟小括号里数据全等的case值,并执行里面对应的代码
若没有全等 === 的则执行default里的代码
例:数据若跟值2全等,则执行代码2
注意事项:
switch case语句一般用于等值判断,不适合于区间判断
switch case一般需要配合break关键字使用 没有break会造成case穿透
语法:
switch (表达式) {
case 值1:
代码1
break
case 值2:
代码2
break
case 值3:
代码3
break
default:
代码n
break
}
//示例:用户输入学科编号,告诉用户学习什么学科 1-前端 2-PHP 3-java 4-UI
let subject = +prompt(
'请输入您要报名的学科编号,1-前端 2-PHP 3-java 4-UI'
)
switch (subject) {
case 1:
alert('恭喜你选择了2022年最有钱途的学科')
break
case 2:
alert('恭喜你选择了PHP学科')
break
case 3:
alert('恭喜你选择了Java学科')
break
case 4:
alert('恭喜你选择了UI学科')
break
default:
alert('脑子有包')
break
}
// 某种情况下,可以合理利用switch-case穿透现象来简化代码
// 什么时候需要省略case,合理利用穿透?
//答案:多个匹配值需要执行相同的代码
/* 用户输入月份,告诉用户什么季节
春季: 3 4 5
夏季: 6 7 8
秋季:9 10 11
冬季:12 1 2
*/
let month = +prompt('请输入月份')
switch (month) {
case 3:
case 4:
case 5:
alert('春季')
break
case 6:
case 7:
case 8:
alert('夏季')
break
case 9:
case 10:
case 11:
alert('秋季')
break
case 12:
case 1:
case 2:
alert('冬季')
break
default:
alert('你是外星人吗?')
break
}
简版计算器
需求:用户输入2个数字,然后输入 + - * / 任何一个,可以计算结果
分析:
①:用户输入数字
②:用户输入不同算术运算符,可以去执行不同的运算 (switch)
// 1.用户输入 2个数字 + 操作符号 + - * /
let num1 = +prompt('请您输入第一个数字:')
let num2 = +prompt('请您输入第二个数字:')
let sp = prompt('请您输入 + - * / 其中一个:')
// 2. 判断输出
switch (sp) {
case '+':
alert(`两个数的加法操作是${num1 + num2}`)
break
case '-':
alert(`两个数的减法操作是${num1 - num2}`)
break
case '*':
alert(`两个数的乘法操作是${num1 * num2}`)
break
case '/':
alert(`两个数的除法操作是${num1 / num2}`)
break
default:
alert(`你干啥咧,请输入+-*/`)
}