Javascript中的FizzBu​​zz:代码根本不会执行或打印

ssl*_*lss 0 javascript fizzbuzz

一直在玩FizzBu​​zz问题,我想知道为什么以下代码不会执行,没有任何东西被打印到控制台.

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);
    } 
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Mar*_*eed 5

您使用了错误的循环结构.应该是for,而不是while.另请注意,它是子句之间的分号,而不是逗号:

for (i=0; i < 100; i++) {
Run Code Online (Sandbox Code Playgroud)

你有什么是这个:

while (i = 0, i < 100, i++) {
Run Code Online (Sandbox Code Playgroud)

逗号只是评估左侧,抛出结果,然后评估右侧.因此设置i为0(并丢弃赋值返回的零值),测试i小于100(但对比较返回的真值没有任何作用),并使用最后一个表达式(i++)的值作为循环条件while.由于i是0,这是假的,循环体永远不会执行.

请注意,如果您已经使用过++i,那么在这种for情况下没有任何区别,但是您的while版本将永远循环而不是根本不运行,因为i在第一次测试真实性时已经增加到1.