异常可以为null还是未定义?

luk*_*s_o 0 javascript

如果我在JS中捕获到异常,该异常可以为null还是未定义?我看到了像下面这样的空检查,并且想知道是否e真的需要进行第一次检查。我的主观感觉告诉我,e永远是有价值的。

try {
  /// any code here
} catch (e) {
if (e && e.data && e.data.errors) {
  console.error(e.data.errors)
}
Run Code Online (Sandbox Code Playgroud)

我已经在网上搜索了,但找不到答案。

Cer*_*nce 5

是的,如果您抛出一个普通值而不是a new Error,则可能会发生这种情况:

try {
  throw undefined;
} catch(e) {
  console.log(e, typeof e);
}


try {
  throw null;
} catch(e) {
  console.log(e, typeof e);
}
Run Code Online (Sandbox Code Playgroud)

但这是非常不好的做法-最好将抛出的错误包装在new Error(或其他适当的错误构造函数中)中:

try {
  throw new Error('error!');
} catch(e) {
  console.log(e);
  console.log(e.stack);
  console.log(e.name);
}
Run Code Online (Sandbox Code Playgroud)