JavaScript: JavaScript 条件语句

条件语句让程序有了"判断力"——根据不同情况走不同的路。没有条件语句,程序只能从上到下一条道走到黑;有了它,程序才能像人一样做选择。

1. if 语句

最基础的条件判断:如果条件为真,就执行花括号里的代码。

HTML
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>if语句</title></head>
<body>
<div id="output"></div>
<script>
let age = 20;
if (age >= 18) {
  document.getElementById('output').textContent = '你已成年';
}
</script>
</body>
</html>

花括号里只有一条语句时可以省略花括号,但强烈不建议——加上花括号代码更清晰,也避免后续加语句时忘记补。


▶ 示例

JAVASCRIPT
// 本节代码示例
const message = "你好,世界!";
console.log(message);
▶ 试一试

这是最简单的示例,后续章节会详细解释。## 2. if...else 语句

二选一的情况:条件为真走 if,否则走 else。

HTML
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>if...else</title></head>
<body>
<div id="output"></div>
<script>
let score = 45;
if (score >= 60) {
  document.getElementById('output').textContent = '及格了';
} else {
  document.getElementById('output').textContent = '没及格,继续努力';
}
</script>
</body>
</html>

3. if...else if...else

多个条件依次判断,从上到下,哪个先满足就执行哪个,剩下的全部跳过:

HTML
<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>if...else if</title></head>
<body>
<div id="output"></div>
<script>
let score = 85;
if (score >= 90) {
  document.getElementById('output').textContent = '优秀';
} else if (score >= 80) {
  document.getElementById('output').textContent = '良好';
} else if (score >= 60) {
  document.getElementById('output').textContent = '及格';
} else {
  document.getElementById('output').textContent = '不及格';
}
</script>
</body>
</html>

▶ 示例:根据分数判断等级

HTML
<!DOCTYPE html>
<html>
<body>
  <h2>分数等级判断</h2>
  <input type="number" id="score" placeholder="输入分数(0-100)">
  <button onclick="checkGrade()">判断等级</button>
  <p id="result"></p>
  <script>
    function checkGrade() {
      let score = Number(document.getElementById('score').value);
      let grade = '';
      let color = '';

      if (score >= 90) {
        grade = '优秀 🌟';
        color = 'green';
      } else if (score >= 80) {
        grade = '良好 👍';
        color = 'blue';
      } else if (score >= 70) {
        grade = '中等 😐';
        color = 'orange';
      } else if (score >= 60) {
        grade = '及格 😅';
        color = '#cc8800';
      } else {
        grade = '不及格 😢';
        color = 'red';
      }

      document.getElementById('result').innerHTML =
        `<span style="color:${color};font-size:24px">${score}分 - ${grade}</span>`;
    }
  </script>
</body>
</html>
▶ 试一试

4. 三元运算符

三元运算符是 if...else 的简写形式,适合简单的二选一:

HTML
<script>
// 语法:条件 ? 值1 : 值2
let age = 20;
let status = age >= 18 ? '成年' : '未成年';

// 等价于:
let status2;
if (age >= 18) {
  status2 = '成年';
} else {
  status2 = '未成年';
}
</script>
💡 提示: 三元运算符适合赋值类的简单判断。逻辑复杂时别硬塞三元,老老实实写 if...else,可读性更重要。


5. switch 语句

当判断的是同一个变量的多个固定值时,switchif...else if 更清晰:

HTML
<script>
let day = 3;
switch (day) {
  case 1: console.log('周一'); break;
  case 2: console.log('周二'); break;
  case 3: console.log('周三'); break;
  // ...
  default: console.log('无效的数字');
}
</script>

两个关键点

  1. break 不能省——没有 break 会"穿透"到下一个 case 继续执行
  2. default 是兜底——所有 case 都不匹配时执行

▶ 示例:switch 穿透的坑

HTML
<!DOCTYPE html>
<html>
<body>
  <h2>switch 语句演示</h2>
  <p id="output"></p>
  <script>
    let html = '<strong>有 break 的情况:</strong><br>';
    let fruit = 'apple';
    switch (fruit) {
      case 'apple': html += '苹果<br>'; break;
      case 'banana': html += '香蕉<br>'; break;
      default: html += '未知水果<br>';
    }

    html += '<br><strong>没有 break 的情况(穿透):</strong><br>';
    let num = 2;
    switch (num) {
      case 1: html += '一<br>';
      case 2: html += '二<br>';
      case 3: html += '三<br>';
      default: html += '默认<br>';
    }
    // 输出:二、三、默认 —— 从匹配的 case 开始一路执行到底

    html += '<br><strong>合理利用穿透:</strong><br>';
    let month = 2;
    let season = '';
    switch (month) {
      case 3: case 4: case 5: season = '春季'; break;
      case 6: case 7: case 8: season = '夏季'; break;
      case 9: case 10: case 11: season = '秋季'; break;
      case 12: case 1: case 2: season = '冬季'; break;
    }
    html += `${month}月是${season}`;

    document.getElementById('output').innerHTML = html;
  </script>
</body>
</html>
▶ 试一试
⚠️ 注意: 忘写 break 是 switch 最常见的 bug。但有时候"穿透"也能派上用场——比如多个值执行相同逻辑时,故意省略 break 让它们合并。


6. falsy 值

在条件判断中,以下值都会被视为 false(称为 falsy 值):

falsy 值 说明
false 布尔假
0 数字零
""'' 空字符串
null 空值
undefined 未定义
NaN 非数字

其余所有值都是 truthy,包括 "0"(字符串零)、[](空数组)、{}(空对象)——这些虽然"空",但在条件判断中都是 true

▶ 示例:falsy 值判断

HTML
<!DOCTYPE html>
<html>
<body>
  <h2>falsy 值演示</h2>
  <p id="output"></p>
  <script>
    let html = '<strong>falsy 值(条件判断为 false):</strong><br>';
    let falsy = [false, 0, "", null, undefined, NaN];
    for (let val of falsy) {
      let display = val === "" ? '""' : (val === undefined ? 'undefined' : val);
      html += `${display} → ${val ? 'truthy' : 'falsy'}<br>`;
    }

    html += '<br><strong>容易误判的 truthy 值:</strong><br>';
    let tricky = ["0", [], {}, "false", -1];
    for (let val of tricky) {
      let display = Array.isArray(val) ? '[]' : (typeof val === 'object' ? '{}' : JSON.stringify(val));
      html += `${display} → ${val ? 'truthy' : 'falsy'}<br>`;
    }

    html += '<br><strong>实际应用:</strong><br>';
    let name = '';
    html += `名字: "${name}" → ${name || '未填写'}<br>`;
    let count = 0;
    html += `数量: ${count} → ${count || '无'} (注意0被当falsy了!)<br>`;
    html += `正确写法: ${count !== undefined && count !== null ? count : '无'}`;

    document.getElementById('output').innerHTML = html;
  </script>
</body>
</html>
▶ 试一试
⚠️ 注意:|| 设置默认值时要注意:0"" 是合法值但会被 falsy 误杀。这种情况用 ??(空值合并运算符)更安全——它只在 nullundefined 时才走默认值。


❓ 常见问题

Q ===== 在条件判断中有什么区别?
A == 会做类型转换再比较("1" == 1true),=== 不转换("1" === 1false)。建议始终用 ===,避免隐式转换带来的意外。
Q switch 可以判断字符串吗?
A 可以。switch 不限于数字,字符串、布尔值都能判断,用的是全等比较 ===
Q ??|| 有什么区别?
A || 对所有 falsy 值生效(0、""、null、undefined、NaN、false 都走默认值),?? 只对 nullundefined 生效。需要保留 0 和空字符串时用 ??

📖 小节

📝 作业

  1. 写一个程序:输入年份,判断是否是闰年(能被4整除但不能被100整除,或能被400整除)
  2. 写一个简易计算器:输入两个数字和运算符(+、-、*、/),用 switch 计算结果,除法要处理除数为0的情况
  3. 写一个 BMI 计算器:输入身高(m)和体重(kg),计算 BMI 并给出评价(偏瘦/正常/偏胖/肥胖)
Web-Tutorial.com

Web-Tutorial 技术团队

由多位开发者共同维护的编程教程平台。每篇教程由对应领域的开发者编写和审核,确保内容准确可靠。如发现任何问题,欢迎向我们反馈。

100%

🙏 帮我们做得更好

我们是刚上线的编程教程站,几个人的小团队,精力有限。页面虽经检查,难免还有疏漏——链接失效、排版错乱、内容有误、语言生硬……

如果您发现了,麻烦告诉我们,我们会在收到反馈后第一时间进行修复,再次感谢您的光临 🙏