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;
}