这个非常简单的switch语句有什么问题?

时间:2014-12-08 02:42:14

标签: javascript

第二行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;
    }
}

http://jsfiddle.net/vL4omdxs/

4 个答案:

答案 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,这是一个数字。