Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
嵌套在WHILE循环中的IF语句的结果(Javascript)_Javascript_Loops_If Statement_While Loop_Boolean Logic - Fatal编程技术网

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

嵌套在WHILE循环中的IF语句的结果(Javascript),javascript,loops,if-statement,while-loop,boolean-logic,Javascript,Loops,If Statement,While Loop,Boolean Logic,以下是我的完整代码(javascript): 让我困惑的是,这个IF语句嵌套在while循环中。我知道这段代码是正确的,但我不明白为什么当hasbublegum设置为FALSE时它会绕过IF语句 我最初的想法是打印到控制台会产生: Choo Choo Chocolate has bubblegum Icy Mint has bubblegum Cake Batter has bubblegum Bubblegum has bubblegum 我是否遗漏了一个关键的基本概念,即如果语句忽略FAL

以下是我的完整代码(javascript):

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

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

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

我是否遗漏了一个关键的基本概念,即如果语句忽略FALSE的布尔值?

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

如果您想要获得所需的结果,应按如下方式更改布尔掩码:

var hasBubbleGum = [true, true, true, true];
if
语句中没有错误,唯一的
true
条件是最后一个
hasbublegum
bool数组

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

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

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

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

if (expression) then {statements}
在许多语言中,
然后
是隐含的,而不是打印出来的。
{statements}
仅当
(表达式)
true
或'thruthy'时,才执行,这些语言允许对
布尔值进行强制转换,或缺少本机
布尔值类型。例如,在许多语言中,
0
被认为是
false
,任何不
0
的东西都被认为是
true

您的
hasbublegum[i]
是一个表达式,它将根据索引
i
处数组的内容返回一个
布尔值。您的困惑可能是因为不理解像
==
这样的条件表达式的作用;它们只是“特殊函数”,根据操作数返回
true
false


if
语句是最基本的原语之一。流控制语句的目标是基于某些条件“控制程序执行流”。
while
循环也是一个控制流语句;只要条件保持为真,其作用域内的代码将在循环中执行。

请向我们展示整个循环。我们没有看到右大括号,因此前面可能有更多语句。特别是我们看不到索引变量
i
发生了什么,如果有的话。if检查条件是真是假。由于
hasbublegum[0]
为false,IF解析为false,通常会尝试处理
else
(似乎没有-您的代码似乎不完整)。。所以它什么都不做。。。增加计数器(也没有显示,但我假设它在那个里的某个地方),转到下一个迭代。“输出”仅在找到索引4I上的真实值时显示。很抱歉,我完全忘了在我的postConsider中完成循环。我正在努力学习使用面向对象的样式。相关项的并行数组是个坏主意
var-products={{name:'gum',hasbublesgum:true},{name:'chocolate',hasbublegum:false}……}
我对Javascript和编程基本上是新手。我现在读的那本书(headfirstjavascript)已经为几章的对象做了铺垫,但我现在正在读数组一章。这段代码来自于书中。哦,好的,这很有意义。当括号内的语句用比较运算符比较两个值时,IF语句并不复杂,但当我得到这个IF语句时,它通过我进行了一个循环(双关语)。@jake.wies:啊,是的,和你一起。旁注:括号内的位是表达式,而不是语句。在JavaScript中,表达式被求值,然后(如果有必要)强制为布尔值(在您的例子中,这是不必要的,因为数组中的值是布尔值)。在胁迫中,任何“虚假”的东西都被认为是虚假的。这些值是
0
null
未定义的
NaN
,当然还有
false
。其他任何东西都是“真实的”,并且
if
会进入附加到它的语句中。
var hasBubbleGum = [true, true, true, true];
if (expression) then {statements}