为什么“如果”有效但“开关”无效?

时间:2019-09-20 16:30:55

标签: javascript

// It is simple code

var num = prompt("put number");
// This way is not worked 
switch (num) {
    case num > 0:
        console.log("num++");
        break;
    case num < 0:
        console.log(num-2);
        break;
}
// But this worked
if (num > 0){
    console.log(num++);
} else if (num < 0){
    console.log(num -2);
}

我通过“ switch”操作的第一种方法不起作用,但是“ if”方法有效。

我尝试了所有用于更改代码或其他方式的事情,但结果相同。

请大家帮我。

3 个答案:

答案 0 :(得分:6)

由于您num > 0中的语句case将返回truefalse。 如果您这样做:

switch (true) {
    case num > 0:
        console.log("num++");
        break;
    case num < 0:
        console.log(num-2);
        break;
}

它将起作用。

答案 1 :(得分:0)

案例不能是表达式,您必须先对输入进行规范化。

尽管将表达式放在case中是有效的,但是在这种情况下,一种更可靠的处理方式是首先对输入进行规范化。

您可以确定方向,例如:

var num = parseInt(prompt("put number"), 10);
var direction = num < 0 ? -1 : 1;

switch (direction) {
    case 1:
        console.log("num++");
        break;
    case -1:
        console.log(num - 2);
        break;
}

答案 2 :(得分:0)

该开关用作案例切换器,这意味着您无法进行比较以创建案例,只能按案例列出案例,并无法执行此案例中的某些功能。 if / else结构适合进行比较,因为if调用中的预期结果始终是布尔值。

示例:

const a = 1;

if (a === 1) {
    console.log('hello');
} else {
    console.log('sad');

switch (a) {
    case 1 : console.log('hello'); break;
    default: console.log('sad'); break;

在您的情况下,我建议您使用if / else if / else,因为它是更推荐的选择。