学习 › JavaScript
流程控制 · 05
条件语句
根据条件做不同的事:if · else if · else,还有 switch。
条件语句就是把“如果……就……”写成代码。
从上往下逐个检查条件,只执行第一个为真的分支。
下面的例子按分数给出等级,并告诉你它是不是偶数。
score = int(input())if score >= 90: print("A")elif score >= 80: print("B")elif score >= 70: print("C")else: print("F")print("even" if score % 2 == 0 else "odd")const score = Number(require("fs").readFileSync(0, "utf8"));if (score >= 90) { console.log("A");} else if (score >= 80) { console.log("B");} else if (score >= 70) { console.log("C");} else { console.log("F");}console.log(score % 2 === 0 ? "even" : "odd");import { readFileSync } from "node:fs";const score: number = Number(readFileSync(0, "utf8"));if (score >= 90) { console.log("A");} else if (score >= 80) { console.log("B");} else if (score >= 70) { console.log("C");} else { console.log("F");}console.log(score % 2 === 0 ? "even" : "odd");import java.util.Scanner; public class Main { public static void main(String[] args) { int score = new Scanner(System.in).nextInt(); if (score >= 90) { System.out.println("A"); } else if (score >= 80) { System.out.println("B"); } else if (score >= 70) { System.out.println("C"); } else { System.out.println("F"); } System.out.println(score % 2 == 0 ? "even" : "odd"); }}using System; class Program{ static void Main() { int score = int.Parse(Console.ReadLine()); if (score >= 90) Console.WriteLine("A"); else if (score >= 80) Console.WriteLine("B"); else if (score >= 70) Console.WriteLine("C"); else Console.WriteLine("F"); Console.WriteLine(score % 2 == 0 ? "even" : "odd"); }}#include <iostream> int main() { int score; std::cin >> score; if (score >= 90) { std::cout << "A\n"; } else if (score >= 80) { std::cout << "B\n"; } else if (score >= 70) { std::cout << "C\n"; } else { std::cout << "F\n"; } std::cout << (score % 2 == 0 ? "even" : "odd") << '\n';}#include <stdio.h> int main(void) { int score; scanf("%d", &score); if (score >= 90) { puts("A"); } else if (score >= 80) { puts("B"); } else if (score >= 70) { puts("C"); } else { puts("F"); } puts(score % 2 == 0 ? "even" : "odd"); return 0;}score = 控制台.读行().转数字();如果 (score >= 90){ 控制台.输出("A");}否则 如果 (score >= 80){ 控制台.输出("B");}否则 如果 (score >= 70){ 控制台.输出("C");}否则{ 控制台.输出("F");}控制台.输出(score % 2 == 0 ? "even" : "odd");75
C odd
要点
- 条件是从上往下检查的,所以要先写最严格的标准。
如果先写score >= 70,连 95 分也会变成 C。 - 全都为假时执行
else分支。else可以不写。 - 连接条件的逻辑运算符:并且
&&、或者||、非!。
Python 用and、or、not。
前面已能确定结果时,后面就不再计算(x != 0 && 10 / x > 1是安全的)。 - 把一个值和多种情况比较时,switch 更好读。
各语言在“会不会贯穿到下一个情况”上不一样。 - 简短的二选一用三元运算符:
条件 ? 为真时 : 为假时(Python 写作A if 条件 else B)。
各语言的写法
| Python | if 条件: / elif 条件: / else: — 用 : 和缩进代替大括号。switch 从 3.10 起写作 match x: + case 1 | 2: + case _: |
|---|---|
| JavaScript | if (条件) { } else if (条件) { } else { } — switch 中 case 没有 break 就会贯穿到下一个 case。值用 === 比较 |
| TypeScript | 和 JavaScript 一样。 比较不同类型的值时,编译时就会提示 |
| Java | if (条件) { } else if (条件) { } else { } — switch 需要 break。Java 14 起的 case 1, 2 -> … 不会贯穿 |
| C# | if (条件) { } else if (条件) { } else { } — switch 中每个有内容的 case 都必须有 break(或 return),漏写就是编译错误 |
| C++ | if (条件) { } else if (条件) { } else { } — switch 只能用于整数(包括字符),没有 break 就会贯穿到下一个 case |
| C | 和 C++ 一样。 真和假就是非 0 的数和 0 |
| Craykon | 如果 (条件) { } 否则 如果 (条件) { } 否则 { } — 选择 (x) { 情况 1, 2: … 默认: … } 只执行匹配的那一个情况,不会贯穿 |
常见错误
把 == 写成了 =C · C++ · JavaScript · TypeScript
if (x = 5) {
printf("五");
}→ 5 被赋给 x,条件永远为真
比较要用 ==。
Java、C#、Python 和 Craykon 会把这个错误报出来。
像 1 < x < 10 这样连着写JavaScript · C · C++ · Craykon
let x = 50;
console.log(1 < x < 10);→ true — (1 < x) 先变成 true,而 true < 10 为真
拆开写成 1 < x && x < 10。
只有 Python 能像数学那样连着写(TypeScript、Java、C# 会编译错误)。
switch 中漏了 breakC · C++ · Java · JavaScript
switch (n) {
case 1: puts("一");
case 2: puts("二");
}→ n 为 1 时,“一”和“二”都会输出
每个 case 都写 break;。
C# 会报编译错误,Craykon 的 选择 从一开始就不会贯穿。
各语言的差异
在 JavaScript 和 TypeScript 中比较相等要用
Craykon 的
在 JavaScript 和 TypeScript 中比较相等要用
===。== 会先转换类型再比较,所以 "1" == 1 和 "" == 0 都是 true。Craykon 的
== 和 === 一样严格:"1" == 1 是 假。