Javascript 处理异常语句-try catch throw finally
处理异常语句的作用
当引擎执行Javascript代码时会发生各种错误。包括语法错误,拼写错误,浏览器差异带来的错误,或者是在与用户交互中由于用户的错误输入而导致的错误等。处理异常语句可以帮助我们处理错误,生成自定义的错误信息,从而使看到错误信息提示的用户知道发生了什么。
语句/操作符 | 说明 |
---|---|
try | 测试错误 |
catch | 处理错误 |
throw | 随时抛出自定义错误 |
finally | 无论是否触发异常都会执行该语句 |
try-catch语句
try {
document.write(a);
} catch (e) {
alert("错误");
}
try后面跟着错误语句,catch后面跟着处理错误的语句。见上图,try中的代码块书写了一个未声明的变量,系统检查到异常发生立即停止执行并转而执行catch代码块中的内容,同时catch会接收到一个包含错误信息的对象,保存到()里,为了使程序运行,我们必须给它一个名字,这里命名成e。代码执行结果出现的是显示“错误”的提示信息。
catch语句执行完毕,系统会认为错误已经处理完了,遇到下一行代码中的catch语句(假设有的话),也会直接忽略过去。
try-catch语句之后还可以加上finally子句,不管异常有没有出现,该语句都必将会被执行,见下图。
try {
document.write(a);
} catch (e) {
alert("错误");
} finally {
document.write("欢迎使用");
}
代码的执行顺序为:首先执行try语句,如果抛出异常则接着执行catch语句,如果没有异常catch语句中的代码块会被忽略。最后将执行finally语句。运行示例代码,弹出错误提示信息点确认后,屏幕会显示“欢迎使用”。
注意:
- try语句中的错误不会形成机制记录或错误报告。
- 当try或catch语句中有return语句时,try和catch里的return语句会被忽略,finally子句仍然正常执行。
throw操作符
throw的作用是抛出自定义的错误,它的值可以为任意类型,但是必须要给操作符指定一个值。只有在try-catch语句中才可以使用throw操作符,它出现在try-catch语句外时,代码在遇到到throw操作符出现的那一行时会停止执行。throw自定义的错误值会存储在catch语句里,我们可以通过调用它的名字来调用这个值。
通过使用try-catch语句和throw操作符,我们可以自定义面向用户的异常提示信息,见下面的例子
<p>请输入5-10之间的数字</p>
<input id="demo" type="text" />
<button type="button" onClick="myFunction()">测试输入</button>
<p id="message"></p>
function myFunction() {
var message;
var x;
message = document.getElementById("message");
message.innerHTML = "";
x = document.getElementById("demo").value;
x = Number(x); //把x转化成Number对象
try {
if (x == "") throw "请再次输入";
if (isNaN(x)) throw "请输入数字";
if (x < 5) throw "太小";
if (x > 10) throw "太大";
} catch (e) {
message.innerHTML = "输入是" + e;
}
执行代码时的错误类型
-
Error
基类型,其他错误类型都继承自该类,所有类型共享了一组相同的属性。Error类型的错误很少,主要目的是供开发人员抛出自定义错误。 -
EvalError
在使用eval()函数而发生异常时抛出。 -
RangeError
在数值超过相应范围时触发。 -
ReferenceError
在找不到对象的情况下触发,比如说访问未声明的变量。 -
SyntaxError
eval()函数内的语法错误。 -
TypeError
执行变量操作时,变量的类型不符合要求。经常出现的错误。 -
URIError
使用encode()URI或decodeURI(),而URI格式不正确时触发
使用throw操作符抛出错误
即使代码运行没有出错(throw上面的部分),我们也可以用throw操作符来创建一个错误,浏览器会像处理自己生成的错误一样来处理这行代码抛出的错误。
throw new SyntaxError("Error!");
此学习笔记的内容参考水墨墨心的博文,笔者把收集的知识点重新整理编排了一下,仅供学习交流之用。侵权必删。
上一篇: List的初始化和赋值操作
下一篇: try、catch、finally语句块
推荐阅读