Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不是';我的try-catch块不会抛出异常吗?_Javascript - Fatal编程技术网

Javascript 为什么不是';我的try-catch块不会抛出异常吗?

Javascript 为什么不是';我的try-catch块不会抛出异常吗?,javascript,Javascript,我有一个简单的函数,检查数字是否为正。如果a

我有一个简单的函数,检查数字是否为正。如果
a<0

function isPositive(a) {
  try{
    switch(a) {
      case a < 0:
      throw 'Too small';
    }
  }
  catch(e) {
    console.log(e)
  }
}
isPositive(-3)
函数isPositive(a){
试一试{
开关(a){
案例a<0:
扔“太小”;
}
}
捕获(e){
控制台日志(e)
}
}
isPositive(-3)

您误用了
开关。打开的值必须是大小写表达式中的值。在您的示例中,
a
(-3)不是表达式
a<0
(即
true
)的结果

开关
在这里不是正确的工具,如果
,请使用

函数isPositive(a){
试一试{
if(a<0){
扔“太小”;
}
}
捕获(e){
控制台日志(e)
}
}

isPositive(-3)
开关的工作方式是:

  • 首先,计算
    开关
    标题(括号中)中的表达式
  • 接下来,对每个
    案例
    表达式进行求值,并与该值进行比较,以确保精确相等。如果找到表达式完全相等的
    案例
    ,执行将与该
    案例的代码一起进行
  • 如果没有匹配的
    大小写
    ,则运行
    默认值
    代码(如果存在)

  • 在代码中,
    开关
    表达式的值将为
    -3
    ,第一个
    案例
    上表达式的值将为
    。因为
    true
    不完全等于
    -3
    ,所以代码不会运行。

    将开关转过来,逐字检查true,以便可以评估每一行

    function isPositive(a) {
      try{
        switch(true) {
          case a < 0:
          throw 'Too small';
        }
      }
      catch(e) {
        console.log(e)
      }
    }
    isPositive(-3)
    
    函数isPositive(a){
    试一试{
    开关(真){
    案例a<0:
    扔“太小”;
    }
    }
    捕获(e){
    控制台日志(e)
    }
    }
    isPositive(-3)
    
    要使其工作,必须将值开关的计算值设置为true:

    switch(true){ // your code }
    

    然后内部的代码将运行,并抛出错误

    您不能使用带有条件的用例,您只需使用ifstatement@Axnyff:你可以,但99.999%的时间你不应该。至少::-)