ssl*_*lss 0 javascript fizzbuzz
一直在玩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);
}
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
您使用了错误的循环结构.应该是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.