您的位置:首页 > Web前端 > JavaScript

《编写可维护的 JavaScript》读书笔记第10章:抛出自定义错误

2013-12-24 01:06 483 查看

1. 错误的本质

当某些非期望的事情发生时程序就引发一个错误。如果错误没有被抛出或者报告给你的话,调试是非常困难的。所以,错误是开发者的朋友,而不是敌人。

2. 在 JavaScript 中抛出错误

throw new Error("Something bad happened.")

以这种方式抛出错误时,如果没有使用 try-catch 捕获的话,浏览器会直接显示这个错误的消息。

// 不好的写法
throw "message";


3. 抛出错误的好处

作者推荐在错误消息中包含函数名称,以及函数失败的原因。

function getDivs(element) {
if (element && element.getElementByTagName) {
return element.getElementByTagName("div");
} else {
throw new Error("getDivs(): Argument must be a DOM element.");
}
}


4. 何时抛出错误

过度地检查并不实际,而且影响性能。辨识代码中哪些部分在特定的情况下最有可能导致失败,并只在那些地方抛出错误。

// 好的写法
function addClass(element, className) {
if (!element || typeof element.className != "string") {
throw new Error("addClass(): First argument must be a DOM element.");
}
element.className += " " + className;
}

经验法则:

修复了一个很难调试的错误后,尝试增加一两个自定义错误。当再次发生错误时,这将有助于更容易地解决问题

编写代码多思考:“我希望(某些事情)不会发生,如果发生,我的代码会一团糟糕”。如果“某些事情”发生,就抛出一个错误

如果编写的代码别人也会使用,思考他们的使用方式,在特定的情况下抛出错误

5. try-catch 语句

try {
somethingThatMightCauseAnError();
} catch (ex) {
handleError(ex);
}

try {
somethingThatMightCauseAnError();
} catch (ex) {
handleError(ex);
} finally {
continueDoingOtherStuff();
}


6. 错误类型

ECMA-262 规范指出了 7 种错误类型:

Error

EvalError

RangeError

ReferenceError

SyntaxError

TypeError

URIError

使用 instanceof 可以在 catch 块中进行类型检查。

创建自定义错误类型,让它继承自 Error:

function MyError(message) {
this.message = message;
}
MyError.prototype = new Error();

throw new MyError("Hello World!");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐