嵌套在WHILE循环中的IF语句的结果使我感到困惑(Javascript)

时间:2015-03-06 18:34:30

标签: javascript loops if-statement while-loop boolean-logic

这是我的完整代码(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布尔值的关键基本思想?

3 个答案:

答案 0 :(得分:4)

  

我是否错过了IF语句忽略FALSE布尔值的关键基本思想?

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

if (expression) then {statements}

隐含then,而不是在许多语言中输入。 {statements}只会执行 (expression) trueboolean或'thruthy'的语言允许implisit强制转换为boolean或缺少本地{ {1}}类型。例如,0在许多语言中被视为false,而0的任何内容都被视为true

您的hasBubbleGum[i]是一个表达式,它将返回boolean值,具体取决于索引i处数组的内容。您的困惑可能来自于不了解像==这样的条件表达式;它们只是“特殊功能”,根据其操作数返回truefalse

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