Javascript &引用;“未定义”;在打印自定义错误消息时的异常处理中

Javascript &引用;“未定义”;在打印自定义错误消息时的异常处理中,javascript,Javascript,嗨,我收到一条“未定义”的自定义错误消息。为什么?我只想要一条错误信息。请任何人帮忙 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); } } consol

嗨,我收到一条“未定义”的自定义错误消息。为什么?我只想要一条错误信息。请任何人帮忙

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());

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

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());

请注意,在这个代码片段中,我在
catch
中返回了一个字符串。行
返回编号(num/den),因为出现错误。

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

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());

请注意,在这个代码片段中,我在
catch
中返回了一个字符串。行
返回编号(num/den)从未被调用,因为发生了错误。

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

function divide(){
设num=2;
设den=0;
试一试{
如果(den==0){
抛出新错误(“除法无效”);
}
返回编号(num/den);
}捕获(e){
返回e.message;
}
}

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

function divide(){
设num=2;
设den=0;
试一试{
如果(den==0){
抛出新错误(“除法无效”);
}
返回编号(num/den);
}捕获(e){
返回e.message;
}
}

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

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

您的代码工作完全正确。我已经在我的控制台上测试过了。 最可能的问题是您的控制台设置,当前必须将控制台设置为仅显示错误。因此,将chrome控制台输出更改为VerboseAll。我附上快照如何改变设置和输出您的代码按照您的期望。

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

你可以参考一下


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

您的代码工作完全正确。我已经在我的控制台上测试过了。 最可能的问题是您的控制台设置,当前必须将控制台设置为仅显示错误。因此,将chrome控制台输出更改为VerboseAll。我附上快照如何改变设置和输出您的代码按照您的期望。

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

你可以参考一下


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

console.log()是否也返回未定义?由于您要进行两次控制台日志记录,因此解释了为什么有两个未定义的返回doesn不是console.log()也返回未定义的?而且,由于控制台日志记录两次,因此解释了为什么有两个未定义的returnsthank。我找到了解决办法。问题是,我正在为divide函数执行一个console.log,它抛出了一个未定义的.谢谢。我找到了解决办法。问题是我正在为divide函数执行一个console.log,它抛出了一个未定义的。