一直在玩FizzBuzz问题,我想知道为什么以下代码不会执行,没有任何内容被打印到控制台。
var i = 0;
while (i = 0, i < 100, i++ ) {
if ( i % 3 === 0) {
console.log("Fizz");
} else if ( i % 5 === 0) {
console.log("Buzz");
} else {
console.log(i);
}
}
我错过了什么?
答案 0 :(得分:5)
您使用了错误的循环结构。它应该是for
,而不是while
。还要注意它们之间的分号,而不是逗号:
for (i=0; i < 100; i++) {
你拥有的是:
while (i = 0, i < 100, i++) {
逗号只评估左侧,抛出结果,然后评估右侧。因此,将i
设置为0(并丢弃赋值返回的零值),i
小于100的测试(但对比较返回的真值没有任何作用),并使用最后一个表达式(i++
)的值作为while
的循环条件。由于i
为0,这是假的,循环体永远不会执行。
请注意,如果您使用了++i
,那么for
案例就没有区别,但您的while
版本会永远循环而不是根本不运行,因为{第一次测试真实性时,{1}}已经增加到1。
答案 1 :(得分:0)
我相信你只会混淆'for'和'while'循环的方式。你已经建立了'while',就像'for'一样!
这样想:当你写这样的while循环时:
while(i<100) {
你说, while(这种情况属实)。括号之间所需要的只是一个声明,以确定它是否真实。在循环的某个地方,你(通常)需要改变i的值,或者你(可能)得到一个无限循环。
现在,for循环,我们在括号之间需要更多信息...我们需要所有确定我们将采用的循环量的信息。就像你在那里写的那样,我们写的是(当我的变量等于这个时;循环直到这个条件成立;改变这个变量)。
通常,这意味着'while'在确定循环逻辑方面提供了更大的灵活性,但'for'循环可能是最容易阅读的。