现在的位置: 首页 > 综合 > 正文

《JavaScript高级程序设计》学习笔记(错误处理)

2013年10月13日 ⁄ 综合 ⁄ 共 2389字 ⁄ 字号 评论关闭

 《JavaScript高级程序设计》学习笔记(错误处理)

错误处理

 

错误和异常

两类主要错误:语法错误和运行时错误

发生语法错误时,就不能继续执行代码,但只有在同一个线程中的代码会受语法错误影响

 

错误报告

 

处理错误

onerror事件处理函数
例如:
window.onerror = function () {
 alert("An error occurred.");
}
但这样错误信息还是会显示出来,如果要隐藏错误信息就要返回true值
例如:
window.onerror = function () {
 alert("An error occurred.");
 return true;
}

取出错误信息
onerror事件处理函数提供了三种信息确定错误性质:
错误信息:对于给定的错误,浏览器会显示同样的信息
URL:发生错误的文件
行号:发生错误的行号
例如:
window.onerror = function (sMessage, sUrl, sLine) {
 alert("An error occurred:/n" + sMessage + "/nURL: " + sUrl + "/nLine Number: " + sLine);
 return true;
}

图象载入错误
除了window对象图象对象也支持onerror事件
当图象未能载入成功就会触发onerror事件
例如:
<img src="b.jpg" onerror="alert('An error');">
或者
<script type="text/javascript">
window.onload = function () {
 document.images[0].onerror = function () {alert("An error");}
 document.images[0].src = "b.jpg";
}
</script>
<img />
注意:image的onerror事件处理函数没有包含错误信息

处理语法错误
首先事件处理函数必须比可能会出错的代码先出现,否则就没有效果了
例如:
window.onerror = function (sMessage, sUrl, sLine) {
 alert("An error occurred:/n" + sMessage + "/nURL: " + sUrl + "/nLine Number: " + sLine);
 return true;
}
alert("Syntax error.";

注意:使用onerror事件处理函数必须注意的是各个浏览器对该事件不同的处理方法,可能会导致在不同的浏览器会有不同的效果

try...catch语句
例如:
try {
 window.nonExistentFunction();
 alert("Method completed.");
} catch (exception) {
 alert("An exception occurred.");
} finally {
 alert("End of try...catch test.");
}

嵌套try...catch语句
例如:
try {
 eval("a ++ b");        //causes error
} catch (oException) {
 alert("An exception occurred.");
 try {
  var arrErrors = new Array(10000000000000000000000);  //causes error
  arrErrors.push(exception);
 } catch (oException2) {
  alert("Another exception occurred.");
 }
} finally {
 alert("All done.");
}

Error对象
catch语句捕获的是Error对象
Error对象特性:
name 表示错误类型的字符串
message 实际的错误信息
不同的错误类型的字符串对应不同的发生原因
实际的错误信息将提供具体的错误信息
例如:
try {
window.nonExistentFunction();
 alert("Method completed.");
} catch (oException) {
 alert("An exception occurred: " + oException.name + " " + oException.message);
} finally {
 alert("End of try...catch test.");
}

判断错误类型
1 使用Error对象的name属性(同上)
2 使用instanceof操作符
例如:
try {
 eval("a ++ b");        //causes SyntaxError
} catch (oException) {
 if (oException instanceof SyntaxError) {
  alert("Syntax Error: " + oException.message);
 } else {
  alert("An unexpected error occurred: " + oException.message);
 }
}

抛出异常
通过throw语句有目的地抛出异常
格式:throw error_object;
其中error_object可以是字符串、数字、布尔值或对象
抛出的异常和浏览器的异常都在try...catch语句中捕获
例如:
function addTwoNumbers(a, b) {
 if (arguments.length < 2) {
  throw new Error("Two numbers are required.");
 } else {
  return a + b;
 }
}

try {
 result = addTwoNumbers(90);
} catch (oException) {
 alert(oException.message);
}

 

调试技巧

1 使用警告框
2 使用Java控制台
3 抛出自定义错误
4 JavaScript校验器

 

调试器

抱歉!评论已关闭.