在Javascript中有几种错误处理方法?错误处理方法讲解!

2021-07-03 10:07:56 浏览数 (2431)

对于JavaScript相信很多有了解过的小伙伴都是比较熟悉的,那么虽然比较熟悉但是我们还是难以避免遇到一些问题,我们看就来说说在“在Javascript中有几种错误处理方法?”这个问题吧!下面是小编整理的相关内容希望对大家有所帮助。

我们知道由于我们使用的浏览器是不会抛出​Error​类型的​exception​异常的,所以如果我们在开发中捕获到​Error​异常的话,我们是可以进行确定这个异常是属于我们的代码抛出的而不是我们在使用的浏览器抛出的。


1、使用window.onerror指定错误处理函数

当在开发中出现有错误的时候,​onerror​是会被​callback​的,如果在开发中某个​JavaScript block ​中有多个​script​错误的时候,第一个错误触发之后,当前的​JavaScript block​ 后面的​script​就会被自动的​Drop​忽略掉,不会被执行,我们来看看下面这个代码:


<html  > 
<head> 
<title>Test</title> 
<script type="text/javascript"> 
window.onerror = function(message, url, line) 
{ 
alert("Error.\nMessage:"+ message +"\nUrl:" + url + "\nLine:" + line) 
return true; 
} 
</script> 
</head> 
<body> 
<script type="text/javascript"> 
test(); 
test(); 
test(); 
test(); 
</script> 
<script type="text/javascript"> 
test(); 
test(); 
test(); 
test(); 
</script> 
</body> 
</html>


    

在上面这个代码中只有每个​block​中第一个​test();​会产生error触发我们的​window.onerror​回调,后面的JavaScript会被忽略掉,而且在​img​中也是会支持​onerror​的代码如下所示:

< img src="pic.gif" onerror = "javascript:alert("An error occurred.");"/>​,由于onerror是浏览器支持的对象,所以它由浏览器来决定是否可以使用,不是DOM标准。


2、使用JavaScript中的try catch throw 处理异常

在JavaScript中定义异常;

(1)、EvalError: An error occurs in the eval() function.

(2)、RangeError: A number value is greater then or less then the number that can be represented in Javascript(Number.MAX_VALUE and Number.MIN_VAKUE).

(3)、ReferenceError: An illegal reference is used.

(4)、SyntaxError: A syntax error occus inside of an eval() function call. All other syntax error are reorted by the browser and cannot be handled with a try...catch statement.

(5)、TypeError. A variables type is unexpected. 6.URIError. An error ocuurs in the encodeURI() or the decodeURI() function.

代码如下如下所示:


<script type="text/javascript"> 
function CreateError() 
{ 
throw new Error("Created error by custom."); 
} 
try 
{ 
//throw a error from a function just want to see the call stack in firefox. 
CreateError(); 
} 
catch(error) 
{ 
var errorMsg = ("Message: " + error.message + "\n"); 
if(typeof(error.stack)!=undefined) 
{ 
//FF 
errorMsg += ("Line Number: " + error.lineNumber + "\n"); 
errorMsg += ("File Name: " + error.fileName + "\n"); 
errorMsg += ("Stack Trace:\n" + error.stack + "\n"); 
} 
else 
{ 
//IE 
errorMsg += ("Description: " + error.description + "\n"); 
errorMsg += ("Number: " + error.number + "\n"); 
} 
alert(errorMsg); 
} 
finally 
{ 
//alert("End try catch.message from finally block."); 
} 
</script> 

而且在我们的代码中,​Error.message​是​IE​和​FireFox​都支持的属性, 然而​IE​支持​description ​和 ​number​属性。

 ​FF​支持​fileName ​​lineNumber ​和 ​stack ​属性, 由于​Javascript​是弱类型的语言, 所以在​catch​部分只能​catch​一次,不能像​C#​这样的语言可以写多个​catch​,​catch​不同类型的​exception​。 但是可以用 ​instanceof ​​ErrorType​的方式实现类似的功能。代码如下所示:


<script type="text/javascript"> 
try 
{ //Syntax Error 
//eval("alert a"); 

//Custom Error 
throw new Error("An error occured."); 
} 
catch(error) 
{ 
if(error instanceof SyntaxError) 
{ 
alert("Syntax Error"); 
} 
else if(error instanceof EvalError) 
{ 
alert("Eval Error"); 
} 
else if(error instanceof RangeError) 
{ 
alert("Range Error"); 
} 
else if(error instanceof ReferenceError) 
{ 
alert("Reference Error"); 
} 
else if(error instanceof TypeError) 
{ 
alert("Type Error"); 
} 
else if(error instanceof Error) 
{ 
alert("Custon Error"); 
} 
alert(error.message); 
} 
</script> 

关于​JavaScript​的​assert()​这方面的话我们可以看下面这串代码:


function assert(bCondition, sErrorMsg) { 
   if (!bCondition) { 
      alert(sErrorMsg); 
      throw new Error(sErrorMsg); 
   } 
} 

总结:

以上就是有关于“在Javascript中有几种错误处理方法?”这个问题的相关内容介绍,如果你有更好的方法也可以和大家分享你的心得体会一同学习探讨。当然了更多有关于JavaScript这方面的内容我们是都可以在JavaScript 教程中进行学习的。