JavaScript 条件判断
条件判断让程序根据不同情况执行不同的代码。这是编程逻辑的核心——“如果满足条件 A,就做 X,否则做 Y”。
if / else
javascript
const score = 85;
if (score >= 60) {
console.log('及格');
} else {
console.log('不及格');
} if 后面括号内的表达式会被转为布尔值。花括号 {} 内是条件成立时执行的代码块。
javascript
const isLoggedIn = true;
if (isLoggedIn) {
console.log('欢迎回来');
}
// isLoggedIn 本身是布尔值,直接用作条件即可
// 不需要写 if (isLoggedIn === true) else if — 多分支
javascript
const score = 85;
if (score >= 90) {
console.log('优秀');
} else if (score >= 75) {
console.log('良好');
} else if (score >= 60) {
console.log('及格');
} else {
console.log('不及格');
}
// 输出:"良好" 条件从上往下依次检查,命中一个后跳过剩余分支。最后的 else 在所有条件都不满足时执行。
真值(truthy)与假值(falsy)
if 的条件位置不一定是布尔值——JavaScript 会自动将任何值转为布尔值。转为 false 的值称为假值,转为 true 的称为真值。
假值只有 6 个,其余所有值都是真值:
| 假值 | 说明 |
|---|---|
false | 布尔假 |
0 / -0 | 数字零 |
'' / "" | 空字符串 |
null | 空值 |
undefined | 未定义 |
NaN | 非数字 |
javascript
// 这些条件都不会执行
if (0) { console.log('不会输出'); }
if ('') { console.log('不会输出'); }
if (null) { console.log('不会输出'); }
if (undefined) { console.log('不会输出'); }
if (NaN) { console.log('不会输出'); }
// 真值的例子
if ('hello') { console.log('会输出'); } // 非空字符串是真值
if (42) { console.log('会输出'); } // 非零数字是真值
if ([]) { console.log('会输出'); } // 空数组也是真值
if ({}) { console.log('会输出'); } // 空对象也是真值 实用的真假值判断
javascript
// 检查数组是否非空
const items = [];
if (items.length) {
// items.length 为 0 → 假值 → 不执行
console.log('有项目');
}
// 检查字符串是否非空
const name = '张三';
if (name) {
// 非空字符串 → 真值 → 执行
console.log(`你好,${name}`);
}
// 检查对象是否存在
const user = null;
if (user) {
// null → 假值 → 不执行(避免访问 user.name 报错)
console.log(user.name);
} switch — 多值匹配
当需要将一个值与多个固定值比较时,switch 比多个 else if 更清晰:
javascript
const day = 3;
let dayName;
switch (day) {
case 1:
dayName = '星期一';
break;
case 2:
dayName = '星期二';
break;
case 3:
dayName = '星期三';
break;
case 4:
dayName = '星期四';
break;
case 5:
dayName = '星期五';
break;
case 6:
case 7:
dayName = '周末';
break;
default:
dayName = '无效日期';
} 每个 case 末尾必须写 break,否则会”穿透”到下一个 case上继续执行。唯一的例外是多个 case 有意共享相同代码(如上面的 case 6 和 7)。
三元运算符(简洁版 if/else)
在赋值时简洁地表达条件二选一:
javascript
const age = 20;
const category = age >= 18 ? '成人' : '未成年';
// 等价于
let category;
if (age >= 18) {
category = '成人';
} else {
category = '未成年';
} 条件嵌套
条件可以多层嵌套,但建议不超过 2 层——嵌套过深说明逻辑可能应该重构:
javascript
if (isLoggedIn) {
if (hasPermission) {
console.log('允许访问');
} else {
console.log('权限不足');
}
} else {
console.log('请先登录');
} 提前返回:减少嵌套
将异常情况提前处理,避免深层嵌套:
javascript
// ❌ 深层嵌套
function getDiscount(user) {
if (user) {
if (user.isVip) {
if (user.years >= 5) {
return 0.3;
} else {
return 0.2;
}
} else {
return 0.1;
}
} else {
return 0;
}
}
// ✅ 提前返回,扁平化
function getDiscount(user) {
if (!user) return 0;
if (!user.isVip) return 0.1;
if (user.years >= 5) return 0.3;
return 0.2;
}