这是我的完整代码(javascript):
var products = ["Choo Choo Chocolate", "Icy Mint", "Cake Batter", "Bubblegum"];
var hasBubbleGum = [false, false, false, true];
var i = 0;
while (i < hasBubbleGum.length) {
if (hasBubbleGum[i]) {
console.log(products[i] + " contains bubblegum");
}
i = i + 1;
}
此代码返回控制台:
Bubblegum contains bubblegum
让我感到困惑的是这个IF语句嵌套在我的while循环中。我知道这段代码是正确的,但我不明白为什么当hasBubbleGum设置为FALSE时它绕过IF语句。
我最初的想法是打印到控制台会产生:
Choo Choo Chocolate has bubblegum
Icy Mint has bubblegum
Cake Batter has bubblegum
Bubblegum has bubblegum
我是否错过了IF语句忽略FALSE布尔值的关键基本思想?
答案 0 :(得分:4)
我是否错过了IF语句忽略FALSE布尔值的关键基本思想?
是的,你是。这是if
的全部内容。在大多数语言中,if
语句遵循以下模式:
if (expression) then {statements}
隐含then
,而不是在许多语言中输入。 {statements}
只会执行 (expression)
true
为boolean
或'thruthy'的语言允许implisit强制转换为boolean
或缺少本地{ {1}}类型。例如,0
在许多语言中被视为false
,而0
的任何内容都被视为true
。
您的hasBubbleGum[i]
是一个表达式,它将返回boolean
值,具体取决于索引i
处数组的内容。您的困惑可能来自于不了解像==
这样的条件表达式;它们只是“特殊功能”,根据其操作数返回true
或false
。
if
语句是福音Control Flow原语之一。流控制语句的目标是它们根据某些条件“控制程序执行流程”。 while
循环也是一个控制流语句;只要条件保持为真,其范围内的代码就会在循环中执行。
答案 1 :(得分:2)
代码是正确的,实际上设置为true
的唯一产品是"Bubblegum"
。
如果你想要你想要的结果,你应该改变你的bool面具如下:
var hasBubbleGum = [true, true, true, true];
if
语句没有错,唯一的条件是true
是你的最后一个hasBubbleGum
bool数组。
答案 2 :(得分:2)
我不明白为什么当hasBubbleGum设置为FALSE时它绕过IF语句。
它没有绕过if
语句:if
语句执行,评估其条件(hasBubbleGum[i]
),看到结果值是false
,所以不会t执行附加到它的语句。 if
会运行,但由于除hasBubbleGum
之外的所有条目i = 3
为false,因此您看不到其他条目的任何输出,仅适用于i = 3
。