对于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 教程中进行学习的。