我遇到了一些误会。有一个for循环,有一些if语句:
for (var number = 1; number < 100; number++) {
if (number % 3 == 0 && number % 5 == 0)
console.log(number + "fizzbuzz");
if (number % 5 == 0)
console.log(number + " buzz");
if (number % 3 == 0)
console.log(number + " fizz");
else console.log(number);
}
此代码的输出为1,2,3个嘶嘶声,4个,5个嗡嗡声,等等。所以它是预期的。 但是如果我们删除大括号,输出将是这样的:
15fizzbuzz
30fizzbuzz
45fizzbuzz
60fizzbuzz
75fizzbuzz
90fizzbuzz
100 buzz
100
此外,该程序还有第二个实现(使用if-else语句):
for (var number = 1; number < 100; number++)
if (number % 3 == 0 && number % 5 == 0)
console.log(number + "fizzbuzz");
else if (number % 5 == 0)
console.log(number + "buzz");
else if (number % 3 == 0)
console.log(number + "fizz");
else console.log(number);
请注意,没有大括号,但输出正常。 你能解释一下,区别的是什么?
答案 0 :(得分:1)
正如很多评论指出的那样,你的第一个代码中缺少elses(或块)会导致它出错。
//a bit shortified to make it clearer
var a=true,b=true;
if(a && b){ }// will be executed
if(a){ } //will be executed
if(b){} //will be executed
//vs.
if(a&&b){}//will be executed
else if(a){}//else => not executed
else if(b){}//else => not executed
但是,重新构建代码可能更好,因为它非常重复:
for (var number = 1; number < 100; number++)
console.log(number+ (number % 3 == 0?"fizz":"")+ (number % 5 == 0?"buzz":""));
所以记录号码,如果是3的倍数加“fizz”,如果是5的倍数加“buzz”......
答案 1 :(得分:1)
for循环的语法是for (statementA; statementB; statementC) statementD
。语句可以与{}
组合在一起,因此可以在需要单个语句的地方使用{statement, statement, ...}
。
for (var number = 1; number < 100; number++) {
if (number % 3 == 0 && number % 5 == 0)
console.log(number + "fizzbuzz");
if (number % 5 == 0)
console.log(number + " buzz");
在这种情况下,statementA
为var number = 1
,statementB
为number < 100
,statementC
为number++
且statementD
为{ {1}}。第二个if (number % 3 == 0 && number % 5 == 0) console.log(number + "fizzbuzz")
是另一个不属于for循环的语句。如果您希望第二个if
语句属于for循环,则需要使用if
将语句组合在一起。
{}
语句的语法为if
或if (expression) statement
。使用多个if (expression) else statement
对齐,您可以将第一个语句传递给for循环,第二个语句将属于仍属于if else
循环的第一个if
。这就是为什么最后一个例子在没有for
的情况下工作的原因。
重要的是要注意代码可能有用,但它仍然是错误的代码。建议使用{}
对{}
,for
和while
下面的语句进行分组,即使它是单个语句。
在尝试理解JavaScript代码之前,您可能想学习JavaScript语法。 https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps
答案 2 :(得分:1)
当你错过分号或括号时,javascript会尝试将其自行插入,&amp;有时会产生一些奇怪的结果。 (规则是正确的,只有人和机器不同意如何处理它:D)
当您删除for
循环的大括号时,javascript尝试将大括号放入代码和&amp;运行它,这与你期望它的行为方式不同,因此你感到困惑!
你写的什么&amp;读:
for (var number = 1; number < 100; number++)
if (number % 3 == 0 && number % 5 == 0)
console.log(number + "fizzbuzz");
if (number % 5 == 0)
console.log(number + " buzz");
if (number % 3 == 0)
console.log(number + " fizz");
else console.log(number);
javascript对它做了什么&amp;执行:
for (var number = 1; number < 100; number++){ //runs loop here
if (number % 3 == 0 && number % 5 == 0){
console.log(number + "fizzbuzz"); //prints for first condition
}
}
//now number is 100!
if (number % 5 == 0){
console.log(number + " buzz"); //prints for second condition once cause 100%5==0 is true
}
if (number % 3 == 0){
console.log(number + " fizz");
}
else{
console.log(number); //prints for this else condition once cause 100%3==0 is false
}
这是完全有效的&amp;这里没有错误或错误!
这是因为如果在else
之后没有立即if
,那么javascript在那里终止该语句,但是如果你使用else...if
那么它会继续该语句直到找到{{1}或else
如果您想使用此类行为,请使用Google Closure Compiler查看机器如何解释代码。
注意:正如@carcigenicate在评论中建议的那样,始终使用大括号!