“你想来一个额外的屏幕贴膜吗?只要$9.99。” 热心的手机店店员请你做个决定。而你也许需要首先咨询一下钱包或银行帐号的 状态 才能回答这个问题。但很明显,这只是一个简单的“是与否”的问题。

    在我们的程序中有好几种方式可以表达 条件(也就是决定)。

    最常见的一个就是if语句。实质上,你在说,“如果 这个条件成立,做后面的……”。例如:

    1. var bank_balance = 302.13;
    2. var amount = 99.99;
    3. if (amount < bank_balance) {
    4. console.log( "I want to buy this phone!" );
    5. }

    if语句在括号( )之间需要一个表达式,它不是被视作true就是被视作false。在这个程序中,我们提供了表达式amount < bank_balance,它确实会根据变量bank_balance中的值被求值为truefalse

    如果条件不成立,你甚至可以提供一个另外的选择,称为else子句。考虑下面的代码:

    1. const ACCESSORY_PRICE = 9.99;
    2. var bank_balance = 302.13;
    3. var amount = 99.99;
    4. amount = amount * 2;
    5. // 我们买得起配件吗?
    6. if ( amount < bank_balance ) {
    7. console.log( "I'll take the accessory!" );
    8. amount = amount + ACCESSORY_PRICE;
    9. }
    10. // 否则:
    11. else {
    12. console.log( "No, thanks." );
    13. }

    在这里,如果amount < bank_balancetrue,我们将打印出"I'll take the accessory!"并在我们的变量amount上加9.99。否则,else子句说我们将礼貌地回应"No, thanks.",并保持amount不变。

    正如我们在早先的“值与类型”中讨论的,一个还不是所期望类型的值经常会被强制转换为那种类型。if语句期待一个boolean,但如果你传给它某些还不是boolean的东西,强制转换就会发生。

    JavaScript定义了一组特定的被认为是“falsy”的值,因为在强制转换为boolean时,它们将变为false —— 这些值包括0""。任何不再这个falsy列表中的值都自动是“truthy” —— 当强制转换为boolean时它们变为true。truthy值包括99.99"free"这样的东西。更多信息参见第二章的“Truthy与Falsy”。

    除了if 条件 还以其他形式存在。例如,switch语句可以被用作一系列if..else语句的缩写(见第二章)。循环(见“循环”)使用一个 条件 来决定循环是否应当继续或停止。

    注意: 关于在 条件 的测试表达式中可能发生的隐含强制转换的更深层的信息,参见本系列的 类型与文法 的第四章。