此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
if...else
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
In this article
尝试一下
function testNum(a) { let result; if (a > 0) { result = "positive"; } else { result = "NOT positive"; } return result;}console.log(testNum(-5));// Expected output: "NOT positive"语法
if (condition) statement1// 带有 else 子句if (condition) statement1else statement2conditionstatement1当条件为真时执行的语句。可为任意语句,包括嵌套了
if的语句。要执行多条语句,使用块语句({ /* ... */ })将这些语句分组;若不想执行语句,则使用空语句。statement2如果
condition为假且else从句存在时执行的语句。可为任意语句,包括块语句和嵌套的if语句。
描述
可以嵌套多个if...else 语句以创建else if 子句。请注意,JavaScript 中没有elseif(单个词)关键字。
if (condition1) statement1else if (condition2) statement2else if (condition3) statement3// …else statementN要看看它如何工作,可以调整下嵌套的缩进:
if (condition1) statement1else if (condition2) statement2 else if (condition3) statement3// …要在一个子句中执行多条语句,可使用块语句({ /* ... */ })来组织这些语句。
if (condition) { statements1} else { statements2}不使用块可能会导致令人困惑的行为,尤其是在代码是手动格式化的情况下。例如:
function checkValue(a, b) { if (a === 1) if (b === 2) console.log("a 是 1 并且 b 是 2"); else console.log("a 不是 1");}这段代码看上去没什么问题,但是,执行checkValue(1, 3) 会输出“a 不是 1”。这是因为在悬空 else 的情况下,else 子句会连接到最近的if 子句。因此,上述代码在缩进适当的情况下看起来会是这样的:
function checkValue(a, b) { if (a === 1) if (b === 2) console.log("a 是 1 并且 b 是 2"); else console.log("a 不是 1");}通常情况下,始终使用块语句是种很好的做法,特别是在涉及嵌套if 语句的代码中。
function checkValue(a, b) { if (a === 1) { if (b === 2) { console.log("a 是 1 并且 b 是 2"); } } else { console.log("a 不是 1"); }}不要将原始的布尔值true 和false 与Boolean 对象的真或假混淆。任何不是false、undefined、null、0、-0、NaN 或空字符串("")的值,以及任何对象(包括值为false 的布尔对象),在用作条件时都被视为真。例如:
const b = new Boolean(false);if (b) { console.log("b 为真"); // “b 为真”}示例
>使用 if...else
if (cipherChar === fromChar) { result += toChar; x++;} else { result += clearChar;}使用 else if
请注意,JavaScript 中没有elseif 关键字。但是,你可以在else 和if 之间加上一个空格:
if (x > 50) { /* 做一些事情 */} else if (x > 5) { /* 做一些事情 */} else { /* 做一些事情 */}使用赋值作为条件
你几乎不应该在if...else 语句中使用像x = y 这样的赋值作为条件:
if ((x = y)) { // …}因为与while 循环不同,条件只会被求值一次,所以赋值操作只会被执行一次。上述代码等价于:
x = y;if (x) { // …}规范
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-if-statement> |