2017-07-06 39 views
0

我想要做一个简单的程序,打印出不同的短语取决于是否满足特定的条件。我们在一个函数中输入2个整数参数,它评估一个数字是大于,小于,还是两个数字是否相等。我的代码如下所示:开关语句总是默认在javascript

function CheckNums(num1,num2) { 
switch (num1,num2) { 
    case (num2>num1): 
    console.log('num2 greater than num1'); 
    break; 
    case (num2 === num1): 
    console.log('both equal'); 
    break; 
    default: 
    console.log('num1 greater than num2'); 
    } 
} 

任何情况下,无论是我输入:CheckNums(4,5),CheckNums(2,2),CheckNums(5,4)的程序运行默认。

重要提示:林没有要求替代解决这个问题。我已经设法使用if语句或三元运算符来解决它。我问的是:为什么这个开关不工作?

问题是I`ve商议,并没有解决我的问题:

JavaScript switch statement only executes the default case

溶胶:这个家伙在的Math.random()生成器只生成的数字有问题小数位,当然,除了默认值以外,不会出现在任何一种情况下。

JS Switch case not working correctly always default is executed

溶胶:这家伙是输入查询字符串作为参数,并期待在案件INT值。

其他说明:

- 也许答案就在于使用parseInt函数? (假设参数不是作为整数输入的。)

-I删除了案例中的括号。这并没有解决我的问题。

- 对于第二种情况,我还尝试使用等号运算符(==)而不是身份运算符(===)。第二起案件仍然没有奏效。

我的问题出在哪里藏身最好的猜测: 当我在谷歌浏览器的控制台程序编译,我得到以下通知:“未定义”。所以,我认为那是不允许我的情况适当地评估参数的。有些东西没有被正确定义。

+0

您只能切换1个表达式。案例线必须是一些价值,而不是一个表达。 – James

+0

您正在错误地使用switch语句。使用switch语句,您可以测试不同的值,而不是条件。 – snixtho

回答

1

如果你真的想使用switch语句来做到这一点,你必须很聪明。提示:IF更容易。

function CheckNums(num1, num2) { 
 
    switch (Math.sign(num1 - num2)) { 
 
    case -1: 
 
    console.log('num2 greater than num1'); 
 
    break; 
 
    case 0: 
 
    console.log('both equal'); 
 
    break; 
 
    case 1: 
 
    console.log('num1 greater than num2'); 
 
    break; 
 
    default: 
 
    console.log('Something went wrong'); 
 
    break; 
 
    } 
 
} 
 

 
CheckNums(8, 5); 
 
CheckNums(3, 4); 
 
CheckNums(10, 10); 
 
CheckNums("argh", "argh");

1

为什么这个开关不工作?

因为你写的是相当于

const temp = num1,num2; // comma operator evaluates to the second operand 
if (temp === (num2>num1)) { 
    console.log('num2 greater than num1'); 
} else if (temp === (num2 === num1)) { 
    console.log('both equal'); 
} else { 
    console.log('num1 greater than num2'); 
} 

你要比较一个数字,布尔值,这是从来没有真实,案件因此没有给出匹配default执行。