if
语句
if (condition) { }
- ① condition:条件语句,返回值能隐式转换为 boolean 类型
- 6 个负性值:
0
NaN
''
undefined
null
false
- 6 个负性值:
let score = 61;
if (score >= 60) {
console.log('我执行了'); // 我执行了
}
if … else …
语句
if (condition) {
code block 1;
} else {
code block 2;
}
if … else if … else
语句
if (condition 1) {
code block 1;
} else if (condition 2) {
code block 2;
} else {
code block 3;
}
- 有多个代码块,但只会执行一个
let score = 80;
if (score < 60) {
console.log('我挂科了');
} else if (score < 70) {
console.log('我及格了');
} else if (score < 80) {
console.log('我考得还不错了');
} else if (score < 90) {
console.log('我起飞了'); // 我起飞了
} else {
console.log('够我吹一年了');
}
- 注意:语句是从上往下执行的,如果上面的
condition
为true
,那么执行完对应的code block
后,条件语句结束,后面的语句将不会被执行。所以一般情况下,后面的条件得包含前面的条件
let score = 50
if (score < 100) { // 第一个条件过于宽松,后面的语句都不会被执行
console.log('够我吹一年了'); // 够我吹一年了
} else if (score < 90) {
console.log('我起飞了');
} else if (score < 80) {
console.log('我考得还不错了');
} else if (score < 70) {
console.log('我及格了');
} else {
console.log('我挂科了');
}
- 注意:
else
的代码块可以不写,具体看需求
条件分支语句的嵌套
条件分支语句里面还可以嵌套条件分支语句
let chineseScore = 61
let mathScore = 62
if (chineseScore >= 60) {
if (mathScore >= 60) {
console.log('恭喜你,全部及格了'); // 恭喜你,全部及格了
}
}
switch … case
语句
switch (key) {
case value1:
// code block 1
break;
case value2:
// code block 2
break;
default:
// code block 3
break;
}
key
先与value1
比较,如果相等,则执行code block 1
;如果不相等,则与value2
比较… 以此类推… 如果都不相等,则执行default
后面的code block 3
- 注意:
value
的比较是全等===
的比较,所以比较的是 值 & 类型
let day = 2
switch (day) {
case 0:
console.log('今天是周日');
break;
case 1:
console.log('今天是周一');
break;
case 2:
console.log('今天是周二'); // 今天是周二
break;
case 3:
console.log('今天是周三');
break;
case 4:
console.log('今天是周四');
break;
case 5:
console.log('今天是周五');
break;
default:
console.log('今天是周六');
break;
}
- 注意:要运用好每个 code block 后面的
break
。不写break
的话,执行完对应的 code block 后,会继续执行后面跟着的 code block,直到遇见break
/ 语句结束
let year = 2000
let month = 2
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天')
break;
case 2:
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
console.log('今年的2月份有29天') // 今年的2月份有29天
} else {
console.log('今年的2月份有28天')
}
break;
} // 注意:default 可以不写
- 注意:当我们想用
key
比较一个范围的时候,我们可以用 boolean 值作为key
,用式子作为value
var score = 61
switch (true) { // 运用 boolean 类型进行判断
case score < 60:
console.log('我挂科了');
break;
case score < 70:
console.log('我及格了'); // 我及格了
break;
case score < 80:
console.log('我考得还不错');
break;
case score < 90:
console.log('我起飞了');
break;
default:
console.log('我可以吹一年了');
break;
}
三元运算符
value ? expression1 : expression2
value
如果为 true 则执行expression1
;否则执行expression2
console.log(true ? 8 : 6) // 8
console.log(false ? 8 : 6) // 6
- 注意:能用三目运算符就可以考虑不用
if … else
语句,因为if
条件判断语句性能相对较差
let score = 59;
let msg = '';
if (score < 60) {
msg = '不及格';
} else {
msg = '及格';
}
console.log(msg); // 不及格
let score = 59;
let msg = score < 60 ? '不及格' : '及格';
console.log(msg); // 不及格
小发现
switch … case
能解决的,肯定能用if … else
解决;if … else
能解决的,switch … case
不一定能解决if … else
语句可以考虑用三目运算符if
语句可以考虑用短路算法- 如果三目运算符的返回值是布尔值,就可以不用写返回 ( 比较运算的结果本就是布尔值 )
console.log(1 == 1 ? true : false) // true
console.log(1 == 1) // true