处理JavaScript中的特定错误(认为例外)

你将如何实现不同types的错误,所以你可以抓住特定的,让其他人泡沫..?

一种方法是修改Error对象的原型:

 Error.prototype.sender = ""; function throwSpecificError() { var e = new Error(); e.sender = "specific"; throw e; } 

捕获特定的错误:

 try { throwSpecificError(); } catch (e) { if (e.sender !== "specific") throw e; // handle specific error } 

你们有没有其他的select?

要创build自定义exception,可以从Error对象inheritance:

 function SpecificError () { } SpecificError.prototype = new Error(); // ... try { throw new SpecificError; } catch (e) { if (e instanceof SpecificError) { // specific error } else { throw e; // let others bubble up } } 

一个简单的方法,没有从错误inheritance,可能会抛出一个简单的对象具有名称和消息属性:

 function throwSpecificError() { throw { name: 'SpecificError', message: 'SpecificError occurred!' }; } // ... try { throwSpecificError(); } catch (e) { if (e.name == 'SpecificError') { // specific error } else { throw e; // let others bubble up } } 

正如下面的评论所指出的那样,这是Mozilla特有的,但是你可以使用'条件接收'模块。 例如:

 try { ... throwSpecificError(); ... } catch (e if e.sender === "specific") { specificHandler(e); } catch (e if e.sender === "unspecific") { unspecificHandler(e); } catch (e) { // don't know what to do throw e; } 

这给了Java更类似于types化的exception处理,至less在语法上。

try-catch-finally.js

 _try(function () { throw 'My error'; }) .catch(Error, function (e) { console.log('Caught Error: ' + e); }) .catch(String, function (e) { console.log('Caught String: ' + e); }) .catch(function (e) { console.log('Caught other: ' + e); }) .finally(function () { console.log('Error was caught explicitly'); });