遇到的问题
最近遇到一个问题,在脚本编辑器中,我希望在catch错误时能抛出新的错误(因为需要在catch中做一些事情,并且能在控制台看到准确的错误信息。),示例代码如下:
try{
//...
}catch(err){//在这里throw新的错误,并且函数栈还要保持err的
}
解决
我一开始傻乎乎的用throw new Error()一个新的错误,但是在控制台输出后,函数的调用栈就已经变了,致使定位不到问题代码。
原来直接throw 抛出catch接收的error对象就能让控制台的错误信息是正确的。哈哈哈。
try{
//...
}catch(err){//其他事情// 要原错误信息就throw errthrow err
}
其他用法
1、throw 能抛出表达式,可以是数字、字符串、自定义对象等,但是更应该抛出Error对象及其子类实例。
2、除了new Error,还能new TypeError来表示类型错误,代码如下:
function isNumeric(x) {return ["number", "bigint"].includes(typeof x);
}function sum(...values) {if (!values.every(isNumeric)) {throw new TypeError("只能添加数字");}return values.reduce((a, b) => a + b);
}console.log(sum(1, 2, 3)); // 6
try {sum("1", "2");
} catch (e) {console.error(e); // TypeError:只能添加数字
}
MDN地址
throw - JavaScript | MDN