嵌套在 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 根据它们的操作数 truefalse

if 语句是基本的 Control Flow 原语之一。流程控制语句的objective 是它们"control the flow of program execution" 基于某些条件。 while 循环也是一个控制流语句;只要条件保持为真,其作用域内的代码就会循环执行。