HOWTO · JavaScript
在 JavaScript 中的 if 语句中指定多个条件
在本文中,我们将看到如何在 JavaScript 中的 if 语句中使用多个条件。
本页内容
在 JavaScript 中,将每个条件写在 if 语句的圆括号内。所有条件都必须为真时,用 && 连接;至少一个条件为真即可时,用 || 连接。混合逻辑时用圆括号明确分组;如果不同条件需要执行不同操作,则使用 if...else if 链。
在 JavaScript 的 if 语句中用 && 和 || 组合条件
在 if 条件中,&& 要求两个操作数都为真值,|| 则要求至少一个操作数为真值。JavaScript 逻辑运算符会返回其中一个操作数的值,这个值不一定是布尔值;随后,if 语句会检查结果的真值性。例如,age >= 18 && hasTicket 只有在某人已成年且持有门票时,才允许执行某项操作。如果任一条件是假值,组合条件的结果就是假值。
例如,isAdmin || isOwner 会在用户是管理员或拥有该项目时允许执行某项操作。根据实际规则选择运算符:“这些条件全部满足”用 &&;“这些条件中任一满足”用 ||。
在这个示例中,第一个检查只接受已成年且持有门票的人;第二个检查则接受管理员或项目所有者。
运行以下示例:
本节中的代码以及显示的标签或输出仍为英文。
const visitors = [
{ name: "Ava", age: 20, hasTicket: true, isAdmin: false, isOwner: false },
{ name: "Ben", age: 16, hasTicket: true, isAdmin: false, isOwner: true },
{ name: "Cy", age: 30, hasTicket: false, isAdmin: true, isOwner: false }
];
for (const visitor of visitors) {
if (visitor.age >= 18 && visitor.hasTicket) {
console.log(`${visitor.name}: entry allowed`);
}
if (visitor.isAdmin || visitor.isOwner) {
console.log(`${visitor.name}: can manage the item`);
}
}
Ava: entry allowed
Ben: can manage the item
Cy: can manage the item
这些条件使用布尔属性和数值比较,因此可以先分别理解每个部分,再看运算符如何组合结果。在实际程序中,请将示例值替换为应用中的值。
通过分组和优先级安全组合 && 与 ||
你可以在一个条件中组合这两个运算符。JavaScript 的 && 优先级高于 ||,因此 isMember || hasCoupon && cartTotal >= 50 等同于 isMember || (hasCoupon && cartTotal >= 50)。这表示所有会员都符合条件;非会员则必须同时持有优惠券且购物车总额至少为 50。
如果规则需要以不同方式分组,或圆括号能让规则更易读,就应加上圆括号。例如,(isMember || hasCoupon) && cartTotal >= 50 要求会员和持有优惠券的人都满足最低消费金额。这两个表达式并不等价。有关 JavaScript 运算符优先级,请参阅 MDN 运算符优先级参考。
比较值是否等于特定数字或字符串时,请使用严格相等运算符,例如 status === "ready"。这样可以避免宽松相等运算符(==)执行的类型转换。逻辑运算符还会短路求值:如果 && 左侧为假,就不会计算右侧操作数;如果 || 左侧为真,也会跳过右侧操作数。这对于带保护条件的检查很有用,例如 user !== null && user !== undefined && user.active。
条件需要执行不同操作时使用 if…else if
单个 if 条件用于组合多个检查,以决定是否执行同一项操作。如果需要根据一个值在多项操作中进行选择,可以编写 if...else if...else 链。JavaScript 会按顺序检查各个分支,执行第一个条件为真的分支,并跳过该链中其余分支。最后的 else 是可选的,用于处理不符合此前任何条件的值。
例如,可以用 score >= 90、score >= 70 和 score >= 50 等条件将分数划分为不同等级。应先检查最高等级:分数为 95 时,三个比较条件都成立,但分支链只会执行第一个匹配的分支。下面的示例为每个等级指定不同的操作标签:
本节中的代码以及显示的标签或输出仍为英文。
const score = 95;
let action;
if (score >= 90) {
action = "excellent";
} else if (score >= 70) {
action = "pass";
} else if (score >= 50) {
action = "review";
} else {
action = "retry";
}
当 score 的值为 95 时,action 会变为 "excellent"。尽管这个分数也满足较低等级的阈值,JavaScript 在找到第一个匹配项后会跳过其余分支。如果改用多个独立的 if 语句,同一个分数可能会触发多项操作。
确保每个分支的条件与操作相符。例如,由于先检查了更高等级,score >= 70 分支覆盖的分数范围是从 70(含)到 90(不含)。检查某个确切值时使用 ===;直接检查范围时,可以用 && 组合比较条件,例如 score >= 70 && score < 90。