App下載

在Javascript中有幾種錯(cuò)誤處理方法?錯(cuò)誤處理方法講解!

猿友 2021-07-03 10:07:56 瀏覽數(shù) (2077)
反饋

對(duì)于JavaScript相信很多有了解過的小伙伴都是比較熟悉的,那么雖然比較熟悉但是我們還是難以避免遇到一些問題,我們看就來說說在“在Javascript中有幾種錯(cuò)誤處理方法?”這個(gè)問題吧!下面是小編整理的相關(guān)內(nèi)容希望對(duì)大家有所幫助。

我們知道由于我們使用的瀏覽器是不會(huì)拋出?Error?類型的?exception?異常的,所以如果我們?cè)陂_發(fā)中捕獲到?Error?異常的話,我們是可以進(jìn)行確定這個(gè)異常是屬于我們的代碼拋出的而不是我們?cè)谑褂玫臑g覽器拋出的。


1、使用window.onerror指定錯(cuò)誤處理函數(shù)

當(dāng)在開發(fā)中出現(xiàn)有錯(cuò)誤的時(shí)候,?onerror?是會(huì)被?callback?的,如果在開發(fā)中某個(gè)?JavaScript block ?中有多個(gè)?script?錯(cuò)誤的時(shí)候,第一個(gè)錯(cuò)誤觸發(fā)之后,當(dāng)前的?JavaScript block? 后面的?script?就會(huì)被自動(dòng)的?Drop?忽略掉,不會(huì)被執(zhí)行,我們來看看下面這個(gè)代碼:


<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>


    

在上面這個(gè)代碼中只有每個(gè)?block?中第一個(gè)?test();?會(huì)產(chǎn)生error觸發(fā)我們的?window.onerror?回調(diào),后面的JavaScript會(huì)被忽略掉,而且在?img?中也是會(huì)支持?onerror?的代碼如下所示:

?< img src="pic.gif" onerror = "javascript:alert("An error occurred.");"/>?,由于onerror是瀏覽器支持的對(duì)象,所以它由瀏覽器來決定是否可以使用,不是DOM標(biāo)準(zhǔn)。


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?是弱類型的語(yǔ)言, 所以在?catch?部分只能?catch?一次,不能像?C#?這樣的語(yǔ)言可以寫多個(gè)?catch?,?catch?不同類型的?exception?。 但是可以用 ?instanceof ??ErrorType?的方式實(shí)現(xiàn)類似的功能。代碼如下所示:


<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> 

關(guān)于?JavaScript?的?assert()?這方面的話我們可以看下面這串代碼:


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

總結(jié):

以上就是有關(guān)于“在Javascript中有幾種錯(cuò)誤處理方法?”這個(gè)問題的相關(guān)內(nèi)容介紹,如果你有更好的方法也可以和大家分享你的心得體會(huì)一同學(xué)習(xí)探討。當(dāng)然了更多有關(guān)于JavaScript這方面的內(nèi)容我們是都可以在JavaScript 教程中進(jìn)行學(xué)習(xí)的。


0 人點(diǎn)贊