第二行console
打印中的评估似乎是正确的,但switch语句不起作用。我没有收到任何错误。
for (var i = 0; i < 100; i++) {
console.log(i % 3 === 0, i % 5 === 0);
switch (i) {
case i % 3 === 0:
console.log(i, " by three");
break;
case i % 5 === 0:
console.log(i, " by five ");
break;
}
}
答案 0 :(得分:3)
正如评论所说,这不是你如何使用开关/案例。 您可以在switch中评估条件,然后使用案例创建不同的行为。
这是你的代码略有修改(实际上不是那么轻微,有一个小的数学扭曲):
var res = document.getElementById('r');
for (var i = 0; i < 100; i++) {
//console.log(i % 3 === 0, i % 5 === 0);
switch (i % 15) {
case 0:
r.innerHTML += i + " by three and five<br>";
break;
case 3:
case 6:
case 9:
case 12:
r.innerHTML += i + " by three<br>";
break;
case 5:
case 10:
r.innerHTML += i + " by five<br>";
break;
}
}
<div id="r"></div>
只是一个提示(offtopic,但可能有帮助):switch / case不是3/5问题的最佳方法。看看使用ifs看起来有多简单:
var res = document.getElementById('r');
for (var i = 0; i < 100; i++) {
res.innerHTML += "<br>" + i + ": ";
if (i % 3 == 0) {
res.innerHTML += "by three ";
}
if (i % 5 == 0) {
res.innerHTML += "by five ";
}
}
<div id="r"></div>
答案 1 :(得分:1)
对案例表达式进行严格相等测试,因此您需要将切换从switch (1)
更改为switch (true)
。但请注意,只会执行一个案例块。
答案 2 :(得分:0)
这不是执行switch语句的方法。必须是:
switch (i % 3) {
case 0:
...
break;
case 1:
...
break;
}
答案 3 :(得分:0)
将switch
括号内的表达式与case
关键字后面的表达式进行比较。以您的代码为例:
for (var i = 0; i < 100; i++) {
console.log(i % 3 === 0, i % 5 === 0);
switch (i) {
case i % 3 === 0: // if (i) equals (i % 3 === 0), run this branch
console.log(i, " by three");
break;
case i % 5 === 0: // if (i) equals (i % 5 === 0), run this branch
console.log(i, " by five ");
break;
}
}
请记住,“平等”在这里意味着===
。由于您的case
表达式都返回布尔值,因此它们永远不会等于您的i
,这是一个数字。