【问题标题】:"undefined" in exception handling while printing custom error message打印自定义错误消息时异常处理中的“未定义”
【发布时间】:2017-09-26 20:36:03
【问题描述】:

您好,我的自定义错误消息显示“未定义”。为什么?我只想要错误消息。任何人都可以帮忙。

function divide() {
  let num = 2;
  let den = 0;
  try{
    if (den == 0){
      throw new Error("division invalid");
    }
    return Number(num/den);
  } catch(e){
    console.log(e.message);
  }
}
console.log(divide());

【问题讨论】:

  • console.log() 不也返回 undefined 吗?并且由于您两次进行控制台日志记录,这解释了为什么有两个未定义的返回

标签: javascript


【解决方案1】:

没有显式返回的函数,隐式返回undefined。您正在抛出一个错误,然后在 catch 块中没有返回任何内容。由于您没有返回值,因此它发送undefined

function divide() {
  let num = 2;
  let den = 0;
  try {
    if (den == 0) {
      throw new Error("division invalid");
     }
     return Number(num/den);
  } catch(e){
    console.log(e.message);
    return 'Can\'t divide by 0!';
  }
}

console.log(divide());

请注意,在这段代码 sn-p 中,我在 catch 中返回了一个字符串。 return Number(num/den); 行从未被调用,因为出现了错误。

【讨论】:

    【解决方案2】:

    您可以将错误返回给调用方法,而不是在函数中记录错误。

    function divide() {
      let num = 2;
      let den = 0;
      try {
        if (den == 0) {
          throw new Error("division invalid");
        }
        return Number(num / den);
      } catch (e) {
        return e.message;
      }
    }
    console.log(divide());

    【讨论】:

      【解决方案3】:

      Console.log() 函数返回未定义。所以按照@Krypton 的建议去做,尽管这仍然会导致 undefined 仍然出现。但是,嘿,至少它少了一个未定义的,不是吗?

      【讨论】:

        【解决方案4】:

        您的代码运行完全正确。我已经在我的控制台上对此进行了测试。 很可能问题出在您的控制台设置上,目前必须将控制台设置为仅显示错误。因此,将 chrome 控制台输出更改为 VerboseAll。我附上了如何根据您的期望更改设置和代码输出的快照。 Solution to your problem Click here

        为了完整起见:在当前版本的chrome中,该设置不再位于底部,而是可以在单击控制台选项卡顶部的“过滤器”图标时找到(左起第二个图标)

        您可以click here进一步参考。

        我希望这能解决您的问题。谢谢:)

        【讨论】:

        • 谢谢。我得到了解决方案。问题是我正在为抛出未定义的divide函数做一个console.log。
        猜你喜欢
        • 2017-11-30
        • 2013-07-05
        • 2010-09-27
        • 1970-01-01
        • 2018-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多