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

JavaScript错误处理指南
本文介绍了JavaScript中的错误处理机制,包括如何正确地抛出和捕获错误,何时应该抛出错误,以及如何创建自定义错误类型。同时,文章还列举了ECMA-262规范中的七种错误类型。

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!");

转载于:https://my.oschina.net/qczhang/blog/187046

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值