源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

JavaScript错误处理

  • 时间:2022-09-19 17:29 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:JavaScript错误处理
[b]一.错误分类[/b] 1. 语法错误 也称为解析错误,发生在传统编程语言的编译时,在JavaScript中发生在解释时,这些错误是由代码中的意外字符直接引起的,然后就不能直接编译/解释,eg,在一行代码因缺少右括号,产生了语法错误。发生语法错误时,就不能继续执行代码。在JavaScript中,只有在同一个线程中的代码会受语法错误的影响。在其他线程中的代码和其他外部引用的文件中的代码,如果不依赖于包含错误的代码,则可以继续执行。 2. 运行时错误 也称为异常(exception,在编译期/解释器后)。此时,问题并不出在代码的语法上,而是,尝试完成的一个操作,在某些情况下是非法的。eg. window.openMyFile(); 因不存在openMyFile()方法,浏览器会返回一个异常。异常只影响发生的线程,其他JavaScript线程即可继续正常的执行。 [b]二.处理错误[/b] 1.      [b]onerror事件处理函数[/b] 它是第一个用来协助JavaScript处理错误的机制。页面上出现异常时,error事件便在window对象上触发。Eg.
[u]复制代码[/u] 代码如下:
                        <html>     <head>            <title>onerror例子</title>            <script type="text/javascript">                   window.onerror = function() {        alert("发生错误!"); }            </script>        </head>        <body onload="fuction1()">        </body> </html>
 在上述代码中,在页面载入时尝试调用不存在的函数,此时会引发一个异常。弹出“发生错误”的错误信息。但是,浏览器的错误信息也显示出来了,如何在浏览器上隐藏它呢,只需onerror方法返回一个true即可。
[u]复制代码[/u] 代码如下:
<script type="text/javascript">      window.onerror = function() {      alert(“发生错误!”);      return true; } </script>
1) 取出错误信息 onerror处理函数提供了三种信息来确定错误确切的性质:  i)错误信息——对于给定错误,浏览器会显示同样的信息;  ii)URL——在哪个文件中发生了错误; 行号——给定URL中发生错误的行号。 访问方法见如下例子:
[u]复制代码[/u] 代码如下:
<script type="text/javascript">            window.onerror = function(sMessage, sUrl, sLine) { alert("发生错误!\n" + sMessage + "\nURL:" + sUrl + "\nLine Number:" + sLine); return true; } </script>
2) 图像载入错误 window对象并非唯一支持onerror事件处理函数的对象,它对图像对象也提供支持。当一个图像由于文件不存在等原因未能成功载入时,error事件便在这个图像上触发。让我们来看一个例子: <img src=”amigo.jpg” onerror=”alert(‘载入图片时发生错误')”/> 上例直接在HTML中分配onerror事件处理函数。当然也可以通过脚本来分配事件处理函数,在设置图像的src特性前,必须等待页面完全载入,代码如下:
[u]复制代码[/u] 代码如下:
<html>     <head>            <title>Image错误测试</title>         <script type="text/javascript">                   function handleLoad() {        document.images[0].onerror = function() {        alert("载入图片时发生错误!"); }; document.images[0].src = "amigo.jpg"; }               </script>        </head>        <body onload="handleLoad()">               <img/>        <body> </html>
注意:与window对象的onerror事件处理函数不同,image的onerror事件任何的额外信息的参数。 3) 处理语法错误 onerror还能处理语法错误。但有一点必须注意,事件处理函数必须是页面中第一个出现的代码,因为如果语法错误出现在设置事件处理函数之前出现,事件处理函数就没有用了。 注意:语法错误会完全停止代码的执行。 说明:使用onerror事件处理函数的主要的问题是,它是BOM的一部分,所以,没有任何标准能控制它的行为。因此,不同的浏览器使用这个事件处理错误的方式有明显的不同,eg,在IE中发生error事件时,正常的代码会继续执行,所有的变量和数据都保留下来,并可通过onerror事件处理函数访问。在Mozilla中,正常的代码执行都会结束,同时所有的错误发生之前的变量和数据都被销毁。 2.      [b]try…catch语句[/b] ECMPScript第三版,引入了try…catch语句。Eg.
[u]复制代码[/u] 代码如下:
try {         window.openFile1();         alert("成功调用openFile1方法"); } catch (exception) {         alert("发生异常!"); } finally {         alert("try..catch测试结束!"); }
 与Java不同,ECMAScript标准在try…catch语句中只能有一个catch语句,因为JavaScript是弱类型的语言,没办法指明catch子句中异常的特定类型。不管错误是什么类型,都由同一个catch语句处理。但Mozilla对其进行了扩展,可加多个catch语句,不推荐这样使用。  finally用于包含无论是否有异常发生都要执行的代码,这对关闭打开的链接和释放资源很有用。 1) 嵌套try…catch语句 用来处理catch子句中的错误问题,让我们来看一个例子,代码如下:
[u]复制代码[/u] 代码如下:
try {     eval("a ++ b"); } catch(oException) {     alert("发生错误!");     try {       var aError = new Array(1000000000000000000000000000000000000000); } catch(exception) {       alert("在catch子句中发生错误!"); } } finally{        alert("已完成") }
2) Error对象 发生错误时,JavaScript有个Error基类用于抛出。它有两个特性:   i)name——表示错误类型的字符串   ii)message——实际的错误信息。 Error对象的name对应于它的类,可以是如下值之一: EvalError:错误发生在eval()函数中; RangeError:数字值超出JavaScript可表示的范围; ReferenceError:使用了非法的引用; SyntaxError:在eval()函数调用中发生了语法错误,其他的愈发错误由浏览器报告,无法通过try…catch处理; TypeError:变量的类型不是预期所需的; URIError:在encodeURI或decodeURI函数发生了错误。 3) 判断错误类型 可采取如下两种方法来判断错误类型,第一种根据异常的name属性判断,如下:
[u]复制代码[/u] 代码如下:
try {         eval("a ++ b"); } catch(oException) {         if (oException.name = "SyntaxError") {        alert("发生SyntaxError!"); } else {        alert("发生其他错误!"); } }
 第二中采用instanceof操作符,代码如下:
[u]复制代码[/u] 代码如下:
try {         eval("a ++ b"); } catch(oException) {        if (oException instanceof SyntaxError) {        alert("发生SyntaxError!"); } else {        alert("发生其他错误!"); } }
4) 抛出异常的throw语句 在ECMAScript第三版引入,用于有目的的抛出异常,抛出的错误对象可为字符串、数字、布尔值或实际的对象,也可以抛出Error对象(其构造函数只有一个函数,即错误信息)。eg1. throw new Error(“错误产生!”); eg2.
[u]复制代码[/u] 代码如下:
function addTwoNumber(a, b) {        if (arguments.length < 2) {        throw new Error("需要传入两个数字!"); } } try {        result = addTwoNumber(90); } catch(oException) {        if (oException instanceof SyntaxError) {        alert("SyntaxError:" + oException.message); } else if (oException instanceof Error){        alert(oException.message); } }
以上就是本文所述的全部内容了,希望小伙伴们能够喜欢。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部