目录
阻止浏览器对错误作出处理的方式有:try/catch和error事件
阻止浏览器对错误作出处理的方式有:try/catch和error事件
try/catch:
任何可能出错的代码放在try中,处理错误的代码放在catch中。
try和catch块无法阻止finally块执行,包括return语句,在finally块之前的return不会执行。
与try/catch对应的一个机制是throw操作符,用于在任何时候自定义错误。throw操作符必须有一个值,但是值的类型不限。使用了throw之后,程序立即停止执行,除非try/catch捕获了抛出的错误。
error事件:
任何没有被try/catch语句处理的错误都会在window对象上触发error事件,onerror事件处理程序传入的不是event对象,而是三个参数:错误消息、发生错误的URL、行号。尽量使用try/catch来捕获错误,不要用到onerror这最后一道防线。
window.onerror=(message,url,line)=>{
console.log(message);
return false; //阻止浏览器默认报告错误的行为
}
通过分析代码提前预测可能发生的错误
常见的错误类型有:类型转换错误、数据类型错误、通信错误
类型转换错误
尽量使用严格相等(===)和严格不相等(!==)来避免
数据类型错误
js是松散类型的,需要开发者自己检查数据类型。一般来说,原始类型的值用typeof检测,对象值用instanceof检测。根据函数的用法,不一定要检查每个参数的类型,但是对外的API都应该作数据类型检查。
通信错误
例如:URL格式或者发送数据的格式不正确。可以通过encodeURIComponent()编码来纠正。可以自行封装一个函数:
function addQueryStringArg(url,name,value){
if(url.indexOf("?")==-1){
url+="?";
}else{
url+="&";
}
url+='${encodeURIComponent(name)=${encodeURIComponent(value)}}';
return url;
}
const url="http://www.somdomain.com";
const newurl=addQueryStringArg(url,"redir","http://www.someotherdomain.com?a=b&c=d");
console.log(newurl);