您现在的位置: 万盛学电脑网 >> 程序编程 >> 脚本专题 >> javascript >> 正文

JS中的异常处理方法分享

作者:佚名    责任编辑:admin    更新时间:2022-06-22

我们在编写js过程中,难免会遇到一些代码错误问题,需要找出来,有些时候怕因为js问题导致用户体验差,这里给出一些解决方法 js容错语句,就是js出错也不提示错误(防止浏览器右下角有个黄色的三角符号,要不用户体验不好)    代码如下: window.onerror=function(){return true;}        下面是为了获取js异常信息,方便开发者找回问题   1,try...catch...   代码如下: <script type="text/javascript"> var txt="" function message() { try    {    adddlert("Welcome guest!")    } catch(err)    {      txt="本页中存在错误。nn"      txt+="点击“确定”继续查看本页,n"      txt+="点击“取消”返回首页。nn"      if(!confirm(txt))          {          document.location.href="/index.html"          }    } } </script>     2 ,throw    代码如下: <script type="text/javascript"> var x=prompt("请输入 0 至 10 之间的数:","") try { if(x>10)   throw "Err1" else if(x<0)   throw "Err2" else if(isNaN(x))   throw "Err3" } catch(er) { if(er=="Err1")   alert("错误!该值太大!") if(er == "Err2")   alert("错误!该值太小!") if(er == "Err3")   alert("错误!该值不是数字!") } </script>     3,onerror:   代码如下: <script type="text/javascript"> onerror=handleErr var txt=""   function handleErr(msg,url,l) { txt="本页中存在错误。nn" txt+="错误:" + msg + "n" txt+="URL: " + url + "n" txt+="行:" + l + "nn" txt+="点击“确定”继续。nn" alert(txt) return true }   function message() { adddlert("Welcome guest!") } </script>       js中的异常处理    在JavaScript可以使用try...catch来进行异常处理。例如:      try { foo.bar();} catch (e) { alert(e.name + ": " + e.message);}  目前我们可能得到的系统异常主要包含以下6种:    EvalError: raised when an error occurs executing code in eval()   RangeError: raised when a numeric variable or parameter is outside of its valid range   ReferenceError: raised when de-referencing an invalid reference   SyntaxError: raised when a syntax error occurs while parsing code in eval()   TypeError: raised when a variable or parameter is not a valid type   URIError: raised when encodeURI() or decodeURI() are passed invalid parameters   上面的六种异常对象都继承自Error对象。他们都支持以下两种构造方法:    new Error();new Error("异常信息");  手工抛出异常的方法如下:   代码如下: try {  throw new Error("Whoops!");} catch (e) {  alert(e.name + ": " + e.message);}      如要判断异常信息的类型,可在catch中进行判断:        代码如下: try { foo.bar(); } catch (e) {  if (e instanceof EvalError) {   alert(e.name + ":" + e.message);  }  else if (e instanceof RangeError) { alert(e.name + ": " + e.message); }   // etc  }      Error具有下面一些主要属性:    description: 错误描述 (仅IE可用).   fileName: 出错的文件名 (仅Mozilla可用).   lineNumber: 出错的行数 (仅Mozilla可用).   message: 错误信息 (在IE下同description)   name: 错误类型.   number: 错误代码 (仅IE可用).   stack: 像Java中的Stack Trace一样的错误堆栈信息 (仅Mozilla可用).   因此为了更好的了解错误信息我们可以将catch部分改为如下形式:         代码如下: try {     foo.bar(); } catch(e) {     if (browserType != BROWSER_IE) {         alert("name: " + e.name + "message: " + e.message + "lineNumber: " + e.lineNumber + "fileName: " + e.fileName + "stack: " + e.stack);     } else {         alert("name: " + e.name + "errorNumber: " + (e.number & 0xFFFF) + "message: " + e.message ");         } } "     JavaScript中的throw命令事实上可以抛出任何对象,并且我们可以在catch接受到此对象。例如:       代码如下: try {     throw new Date(); // 抛出当前时间对象 } catch (e) { alert(e.toLocaleString()); // 使用本地格式显示当前时间     }