“你想来一个额外的屏幕贴膜吗?只要$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
。
如果条件不成立,你甚至可以提供一个另外的选择,称为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
是true
,我们将打印出"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
语句的缩写(见第二章)。循环(见“循环”)使用一个 条件 来决定循环是否应当继续或停止。
注意: 关于在 条件 的测试表达式中可能发生的隐含强制转换的更深层的信息,参见本系列的 类型与文法 的第四章。