网页设计学习笔记

HTML,CSS,JavaScript

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: :: 管理 ::

一、try-catch-finally

为了处理可能出现的错误,我们可以用 try-catch 语句。例如:

try {
  doSomeThing();
  return 1;  
} catch (err) {
  handleError();
  return 2;  
}

这时候当 doSomething 函数能够正常执行时,返回 1;而当 doSomeThing 函数执行出现错误时将执行 handleError 函数并返回 2。

当然我们也可以在最后加上 finally 子句,例如:

try {
  doSomeThing();
  return 1;  
} catch (err) {
  handleError();
  return 2;  
} finally {
  doMoreThing();
  return 3; 
}

此时,try-catch 部分和 finally 部分依次被执行,但按照 ECMA 规范,此时的返回值是由如下规则确定的,如果 finaly 部分的完成类型(Completion type)为 break, continue, return 或者 throw,整个语句的返回值等于 finally 部分的返回值,否则(即 finaly 部分的完成类型为 normal),整个语句的返回值等于 try-catch 部分的返回值。因此,前面例子的返回值为 3,如果我们去掉 return 3; 这行,返回值就和第一个例子一样了。

二、window.onerror

没有用 try-catch 语句处理的错误,将会触发 window 对象的 error 事件。我们可以在 window.onerror 事件处理函数中处理这些错误。例如:

window.onerror = function errorHandler(message, url, line) {
  doSomeThing(message, url, line);
  return true;
}

其中,返回值为 true,将阻止浏览器的默认事件处理程序的运行(例如在控制台显示错误信息)。

windows.onerror 并不在 HTML 4 的标准中,但是 IE 5.5+,Firefox 6.0+,Safari 5.1+,Chrome 13.0+ 和 Opera 11.60+ 都支持它。

参考资料:
[1] try...catch - JavaScript | MDN
[2] Using JavaScript’s Try-Catch Statement
[3] Javascript: try/catch return statement - Stack Overflow
[4] javascript中关于try,finally控制语句的使用
[5] window.onerror - Web API reference | MDN
[6] Events - error - quirksmode.org
[7] JavaScript onerror 事件
[8] SD2020: 仅 IE 和 Firefox 支持 window 对象的 onerror 事件
[9] HTML5 - runtime script errors in documents
[A] Better error handling with window.onerror - Dev.Opera
[B] What browsers fully support script tag onerror and when is it fired?

posted on 2013-06-10 15:43  zoho  阅读(260)  评论(0编辑  收藏  举报