一、发生错误时,JavaScript 生成一个包含有关其详细信息的对象。然后将该对象作为参数传递给catch:
try {
// ...
} catch(err) { // <-- “error 对象”,也可以用其他参数名代替 err
// ...
}
二、在抛出个人所为的异常时,为了充分利用那些属性(比如你的catch块不能分辨是你个人所为的异常还是系统的异常时),可以使用Error构造函数
function doSomethingErrorProne () {
if (ourCodeMakesAMistake()) {
throw (new Error('The message'));
} else {
doSomethingToGetAJavascriptError();
}
}
....
try {
doSomethingErrorProne();
} catch (e) {
console.log(e.name); // => 'Error'
console.log(e.message); // => 'The message' or a JavaScript error message
}
内建的 error对象
属性
1、error 对象具有两个主要属性:
- name:Error 名称,提供了常规的错误类(如DOMException 、 Error 、对于一个未定义的变量,名称是”ReferenceError”)。
- message:关于 error 的详细文字描述,提供了一条从错误对象转换成字符串的简明信息。
2、还有其他非标准的属性在大多数环境中可用。其中被最广泛使用和支持的是:
stack:当前的调用栈:用于调试目的的一个字符串,其中包含有关导致 error 的嵌套调用序列的信息。
try {
lalala; // error, variable is not defined!
} catch(err) {
alert(err.name); // ReferenceError
alert(err.message); // lalala is not defined
alert(err.stack); // ReferenceError: lalala is not defined at (...call stack)
// 也可以将一个 error 作为整体显示出来as a whole
// Error 信息被转换为像 "name: message" 这样的字符串
alert(err); // ReferenceError: lalala is not defined
}
自定义 Error,扩展 Error
【见】自定义 Error,扩展 Error:https://www.yuque.com/tqpuuk/yrrefz/gop3x3