對于JavaScript相信很多有了解過的小伙伴都是比較熟悉的,那么雖然比較熟悉但是我們還是難以避免遇到一些問題,我們看就來說說在“在Javascript中有幾種錯誤處理方法?”這個問題吧!下面是小編整理的相關(guān)內(nèi)容希望對大家有所幫助。
我們知道由于我們使用的瀏覽器是不會拋出?Error
?類型的?exception
?異常的,所以如果我們在開發(fā)中捕獲到?Error
?異常的話,我們是可以進行確定這個異常是屬于我們的代碼拋出的而不是我們在使用的瀏覽器拋出的。
1、使用window.onerror指定錯誤處理函數(shù)
當在開發(fā)中出現(xiàn)有錯誤的時候,?onerror
?是會被?callback
?的,如果在開發(fā)中某個?JavaScript block
?中有多個?script
?錯誤的時候,第一個錯誤觸發(fā)之后,當前的?JavaScript block
? 后面的?script
?就會被自動的?Drop
?忽略掉,不會被執(zhí)行,我們來看看下面這個代碼:
<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();
?會產(chǎn)生error觸發(fā)我們的?window.onerror
?回調(diào),后面的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
?的方式實現(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中有幾種錯誤處理方法?”這個問題的相關(guān)內(nèi)容介紹,如果你有更好的方法也可以和大家分享你的心得體會一同學(xué)習(xí)探討。當然了更多有關(guān)于JavaScript這方面的內(nèi)容我們是都可以在JavaScript 教程中進行學(xué)習(xí)的。