1.9 条件判断
“您想要再加一个价值$9.99的屏幕保护膜吗?”手机商店的店员这么问就是在请你作出一个决定。你可能会先看看钱包或银行账号的当前状态再回答这个问题。但显然,这只是一个简单的“是”或“否”的问题。
程序中有很多种方法可以用于表示条件判断(也就是决策)。
最常用的是if语句。本质上就是在表达“如果这个条件是真的,那么进行后续这些……”。举例来说:
var bank balance = 302.13; var amount = 99.99; if (amount < bank balance) { console.log( "I want to buy this phone! " ); }
if语句要求在括号( )中放一个表达式,这个表达式要么是true,要么是false。在这个程序中,我们提供的表达式是amount < bank balance,根据bank balance变量中的数量,其求值结果确实是true或者false。
你还可以提供一个用于if条件不为真时的选择,我们将其称为else语句。考虑:
const ACCESSORY PRICE = 9.99; var bank balance = 302.13; var amount = 99.99; amount = amount * 2; // 是否可以提供额外的购买? if ( amount < bank balance ) { console.log( "I'll take the accessory! " ); amount = amount + ACCESSORY PRICE; } // 否则: else { console.log( "No, thanks." ); }
在以上的示例中,如果amount < bank balance为真,那么就会打印出"I'll take the accessory! ",并在变量amount上加上9.99。否则,else语句就会礼貌地回答"No, thanks.",并保持amount不变。
正如我们在1.5节中讨论的那样,不满足期望类型的值通常会被强制转换为需要的类型。if语句需要布尔型的值,如果传递的值是非布尔型的,那么就会发生类型转换。
JavaScript定义了一系列特定的值,这些值在强制转换为布尔型时会被认为是“假的”,它们会转化为false,其中包括0和""这样的值。任何不在这个列表中的其他值会自动成为“真的”,因此在强制转换为布尔型时会转化为true。真值包括99.99和"free"这样的值。要想获得更多信息,参见2.1.3节中的“真与假”部分。
除if之外,还有其他形式的条件判断。比如,switch语句可以用作一组if..else语句的简写(参见第2章)。循环(参见1.10节)通过一个条件判断来确定是继续还是停止。
有关测试条件判断时可能隐式发生的类型转换的更多信息,参见本系列《你不知道的JavaScript(中卷)》第一部分中的第4章。