为什么我的try catch块没有抛出异常?

时间:2018-01-11 14:11:33

标签: javascript

我有一个简单的函数,可以检查数字是否为正数。我希望它在a < 0

时抛出异常
function isPositive(a) {
  try{
    switch(a) {
      case a < 0:
      throw 'Too small';
    }
  }
  catch(e) {
    console.log(e)
  }
}
isPositive(-3)

4 个答案:

答案 0 :(得分:15)

你在滥用switch。您打开的值必须是===案例表达式中的值。在您的示例中,a( - 3)不是===表达式a < 0true)的结果。

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语句的工作方式是:

  1. 首先,评估switch标题(括号中)中的表达式。
  2. 接下来,评估每个case表达式,并将其与该值进行比较,以确保完全相等。如果找到表达式完全相等的case,则会使用case的代码执行执行。
  3. 如果没有case匹配,default代码会运行(如果有的话)。
  4. 在您的代码中,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 }

然后里面的代码将运行并且应该抛出错误