《编写可维护的 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!");
相关文章推荐
- 《编写可维护的 JavaScript》读书笔记第11章:不是你的对象不要动
- 《编写可维护的 Javascript》读书笔记(附录 A 部分):Javascript 编码风格指南(1)原始值
- 《编写可维护的 JavaScript》读书笔记第16章:文件合并和加工
- 《编写可维护的 JavaScript》读书笔记第12章:浏览器嗅探
- 《编写可维护的 JavaScript》读书笔记第17章:文件精简和压缩
- javascript 抛出自定义错误
- 《编写可维护的 JavaScript》读书笔记第18章:生成文档
- 《编写可维护的 JavaScript》读书笔记第8章:避免“空比较”
- 《编写可维护的 JavaScript》读书笔记第15章:校验
- 《编写可维护的 JavaScript》读书笔记第19章:自动化测试
- 《编写可维护的 JavaScript》读书笔记第20章:组装到一起
- 《编写可维护的 JavaScript》读书笔记第8章:避免“空比较”
- Javascript 错误处理之抛出自定义错误
- 读书笔记:编写可维护的javascript
- 《编写可维护的 JavaScript》读书笔记第9章:将配置数据从代码中分离出来
- 《编写可维护的 JavaScript》读书笔记第7章:事件处理
- 《编写可维护的 JavaScript》读书笔记第9章:将配置数据从代码中分离出来
- 《编写可维护的 JavaScript》读书笔记第7章:事件处理
- 《编写可维护的 JavaScript》读书笔记第9章:将配置数据从代码中分离出来
- 《编写可维护的 JavaScript》读书笔记第13章:文件和目录结构