我有一个简单的函数,可以检查数字是否为正数。我希望它在a < 0
function isPositive(a) {
try{
switch(a) {
case a < 0:
throw 'Too small';
}
}
catch(e) {
console.log(e)
}
}
isPositive(-3)
答案 0 :(得分:15)
你在滥用switch
。您打开的值必须是===
案例表达式中的值。在您的示例中,a
( - 3)不是===
表达式a < 0
(true
)的结果。
switch
不是正确的工具,请使用if
:
function isPositive(a) {
try{
if (a < 0) {
throw 'Too small';
}
}
catch(e) {
console.log(e)
}
}
isPositive(-3)
...但如果您真的想要使用switch
,您可以(在JavaScript中),因为JavaScript的switch
与C,Java或C#略有不同:您使用switch (true)
以便它与表达式a < 10
匹配:
function isPositive(a) {
try{
switch (true) {
case a < 0:
throw 'Too small';
}
}
catch(e) {
console.log(e)
}
}
isPositive(-3)
案例按源代码顺序进行测试,第一个匹配案例获胜。
但是:if
在这里是正确的,而不是switch
。
答案 1 :(得分:2)
switch
语句的工作方式是:
switch
标题(括号中)中的表达式。case
表达式,并将其与该值进行比较,以确保完全相等。如果找到表达式完全相等的case
,则会使用case
的代码执行执行。case
匹配,default
代码会运行(如果有的话)。在您的代码中,switch
表达式的值为-3
,第一个case
上的表达式值为true
。由于true
不完全等于-3
,因此代码无法运行。
答案 2 :(得分:1)
转动开关,逐字检查是否正确,以便评估每一行。
function isPositive(a) {
try{
switch(true) {
case a < 0:
throw 'Too small';
}
}
catch(e) {
console.log(e)
}
}
isPositive(-3)
答案 3 :(得分:0)
要使其工作,您必须将值开关计算结果设置为true:
switch(true){ // your code }
然后里面的代码将运行并且应该抛出错误