嵌套在 WHILE 循环中的 IF 语句的结果让我感到困惑 (Javascript)
Result of IF statement nested in WHILE loop confusing me (Javascript)
这是我的完整代码 (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;
}
此代码 returns 到控制台:
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?
代码是正确的,实际上唯一设置为 true
的产品是 "Bubblegum"
。
如果你想要你想要的结果,你应该改变你的布尔掩码如下:
var hasBubbleGum = [true, true, true, true];
if
语句没有错,唯一的条件是 true
是你最后一个 hasBubbleGum
布尔数组。
I don't understand why it's bypassing the IF statement when hasBubbleGum is set to FALSE.
它没有绕过 if
语句:if
语句执行,评估其条件 (hasBubbleGum[i]
),看到结果值为 false
,等等不执行附加到它的语句。 if
运行,但由于 hasBubbleGum
对于除 i = 3
之外的所有条目都是假的,您看不到其他条目的任何输出,只有 i = 3
.
Am I missing a key fundamental idea that IF statements ignore boolean values of FALSE?
是的,你是。这就是 if
的全部要点。在大多数语言中,if
语句遵循以下模式:
if (expression) then {statements}
其中 then
在许多语言中都是隐含的,而不是打出来的。 {statements}
仅执行 如果 (expression)
是 true
或 'thruthy' 对于允许隐式转换为 boolean
的语言或缺少原生 boolean
类型。例如 0
在许多语言中被认为是 false
,任何不是 0
的东西都被认为是 true
.
您的 hasBubbleGum[i]
是一个表达式,它将 return 一个 boolean
值,具体取决于索引 i
处数组的内容。您的困惑可能来自于不理解像 ==
这样的条件表达式的作用;它们只是 "special functions" 其中 return 根据它们的操作数 true
或 false
。
if
语句是基本的 Control Flow 原语之一。流程控制语句的objective 是它们"control the flow of program execution" 基于某些条件。 while
循环也是一个控制流语句;只要条件保持为真,其作用域内的代码就会循环执行。
这是我的完整代码 (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;
}
此代码 returns 到控制台:
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?
代码是正确的,实际上唯一设置为 true
的产品是 "Bubblegum"
。
如果你想要你想要的结果,你应该改变你的布尔掩码如下:
var hasBubbleGum = [true, true, true, true];
if
语句没有错,唯一的条件是 true
是你最后一个 hasBubbleGum
布尔数组。
I don't understand why it's bypassing the IF statement when hasBubbleGum is set to FALSE.
它没有绕过 if
语句:if
语句执行,评估其条件 (hasBubbleGum[i]
),看到结果值为 false
,等等不执行附加到它的语句。 if
运行,但由于 hasBubbleGum
对于除 i = 3
之外的所有条目都是假的,您看不到其他条目的任何输出,只有 i = 3
.
Am I missing a key fundamental idea that IF statements ignore boolean values of FALSE?
是的,你是。这就是 if
的全部要点。在大多数语言中,if
语句遵循以下模式:
if (expression) then {statements}
其中 then
在许多语言中都是隐含的,而不是打出来的。 {statements}
仅执行 如果 (expression)
是 true
或 'thruthy' 对于允许隐式转换为 boolean
的语言或缺少原生 boolean
类型。例如 0
在许多语言中被认为是 false
,任何不是 0
的东西都被认为是 true
.
您的 hasBubbleGum[i]
是一个表达式,它将 return 一个 boolean
值,具体取决于索引 i
处数组的内容。您的困惑可能来自于不理解像 ==
这样的条件表达式的作用;它们只是 "special functions" 其中 return 根据它们的操作数 true
或 false
。
if
语句是基本的 Control Flow 原语之一。流程控制语句的objective 是它们"control the flow of program execution" 基于某些条件。 while
循环也是一个控制流语句;只要条件保持为真,其作用域内的代码就会循环执行。