嵌套在WHILE循环中的IF语句的结果混淆了我(Javascript)

Result of IF statement nested in WHILE loop confusing me (Javascript)

本文关键字:Javascript 语句 WHILE 循环 嵌套 IF 结果      更新时间:2023-09-26

这是我的完整代码(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

让我困惑的是嵌套在while循环中的IF语句。我知道这个代码是正确的,但我不明白为什么当hasBubbleGum设置为FALSE时,它会绕过IF语句。

我最初的想法是打印到控制台会产生:

Choo Choo Chocolate has bubblegum
Icy Mint has bubblegum
Cake Batter has bubblegum
Bubblegum has bubblegum

我是否遗漏了一个关键的基本思想,即IF语句忽略FALSE的布尔值?

我是否遗漏了一个关键的基本思想,即IF语句忽略FALSE的布尔值?

是的,你是。这就是if的全部要点。在大多数语言中,if语句遵循以下模式:

if (expression) then {statements}

在许多语言中,then是隐含的,而不是键入的。如果对于允许隐式转换为boolean或缺少本机boolean类型的语言,(expression)true或"thruthy",则仅执行{statements}。例如,在许多语言中,0被认为是false,而任何不是0的东西都被视为true

hasBubbleGum[i]是一个表达式,它将根据索引i处数组的内容返回boolean值。你的困惑可能是因为不理解像==这样的条件表达式的作用;它们只是"特殊函数",根据操作数返回CCD_ 17或CCD_。

if语句是基本控制流原语之一。流控制语句的目的是基于某些条件"控制程序执行的流"。CCD_ 20循环也是一个控制流语句;只要其条件保持为true,其范围内的代码就会在循环中执行。

代码是正确的,实际上唯一设置为true的产品是"Bubblegum"

如果你想要你想要的结果,你应该改变你的布尔掩码如下:

var hasBubbleGum = [true, true, true, true];

if语句中没有任何错误,true的唯一条件是最后一个hasBubbleGum布尔数组。

我不明白为什么当hasBubbleGum设置为FALSE时,它会绕过IF语句。

它并没有绕过if语句:if语句执行,评估其条件(hasBubbleGum[i]),看到结果值为false,因此不执行附加到它的语句。if运行,但由于除i = 3外的所有条目的hasBubbleGum都为false,因此您看不到其他条目的任何输出,只看到i = 3的输出。