'throw'语句意外的'undefined'输出

时间:2019-08-02 06:36:51

标签: javascript undefined throw

我编写了一个简单的函数来检查传递的参数是0,正数还是负数。我知道一个事实,传递的参数是一个数字,而不是任何其他数据类型。我希望得到undefined作为输出,但如果传递的参数是零或负数,我希望可以打印throw语句中提供的文本。

  1. 我已经检查了Throw statement in JavaScript gives "undefined undefined" output处的问题, 那并不能解决我的问题。

  2. 我还尝试过定义一个Error对象,如下所示:

    ZeroError = new Error ("Zero Error");
    
    NegativeError = new Error ("Negative Error");
    

,然后将这些错误用作“抛出”的参数:

throw ZeroError;

throw NegativeError;

对于零值和负值我都得到相同的undefined输出。

这是我的功能:

function isPositive(a)
{
    if (a === 0) throw "Zero Error";
    if (a < 0) throw "Negative Error";
    if (a > 0) return ("YES");
}

当a> 0时输出为“ YES”时,却得到undefined 当a为零或负数时。我希望当a为零时出现“零错误”,而当a为负值时出现“负错误”。

5 个答案:

答案 0 :(得分:1)

throw不返回任何内容,它引发一个异常,将其替换为return,您将获得自己的价值。

  

throw语句引发用户定义的异常。当前函数的执行将停止(不会执行throw之后的语句),并将控制权传递给调用堆栈中的第一个catch块。如果调用方函数之间不存在catch块,则程序将终止。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/throw

编辑:如果需要捕获异常,请查看try/catchhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try...catch

function isPositive(a) {
    if (a === 0) throw "Zero Error";
    if (a < 0) throw "Negative Error";
    if (a > 0) return ("YES");
}

let result; 
try {
   result = isPositive(0);
} catch (e) {
   if (e === "Zero Error") result = "Zero Error";
   if (e === "Negative Error") result = "Negative Error";
}

答案 1 :(得分:1)

问题的优化解决方案。我希望每个人都清楚:)

function isPositive(a) {
    try {
        if (a == 0) throw 'Zero Error';
        if (a < 0) throw 'Negative Error';
        return 'YES';
    } catch (throwedErrorMessage) {
        return throwedErrorMessage;
    }
}

答案 2 :(得分:0)

function Positive(a)
{
  try { 
    if (a === 0)
      throw "Zero Error";
    if (a < 0) throw "Negative Error";
    if (a > 0) return ("YES");
    document.write("hello")
  }
  catch(err) {
   document.write("hello");
}
}
Positive();

答案 3 :(得分:0)

这有效:

function isPositive(a) {
    try {
        if (a < 0) {
            throw "Negative Error"
        } else
            if (a == 0) {
                throw "Zero Error";
            } else {
                return "YES"
            }
    }
    catch (err) {
        return err;
    }
}
  1. 需要尝试捕获
  2. 从catch中返回错误很重要。那个回报 错误会解决“未定义”的回报。

答案 4 :(得分:0)

这对我来说非常合适:

function isPositive(a) {
    if(a>0) {
        return 'YES';
    }
    if (a===0) {
        throw new Error("Zero Error");
    }
    else if (a<0) {
        throw new Error("Negative Error");
    }
}

不知道使用throw的问题是什么,就是这样。稍后当我找到真正的原因时,我将在这里添加。

https://humanwhocodes.com/blog/2009/03/10/the-art-of-throwing-javascript-errors-part-2/