javascript七基础学习系列一千四百三十八:try/catch 语句

ECMA-262 第3 版新增了try/catch 语句,作为在JavaScript 中处理异常的一种方式。基本的语法
如下所示,跟Java 中的try/catch 语句一样:
try {
// 可能出错的代码
} catch (error) {
// 出错时要做什么
}
任何可能出错的代码都应该放到try 块中,而处理错误的代码则放在catch 块中,如下所示:
try {
window.someNonexistentFunction();
} catch (error){
console.log(“An error happened!”);
}
如果try 块中有代码发生错误,代码会立即退出执行,并跳到catch 块中。catch 块此时接收到
一个对象,该对象包含发生错误的相关信息。与其他语言不同,即使在catch 块中不使用错误对象,
也必须为它定义名称。错误对象中暴露的实际信息因浏览器而异,但至少包含保存错误消息的message
属性。ECMA-262 也指定了定义错误类型的name 属性,目前所有浏览器中都有这个属性。因此,可以像下面的代码这样在必要时显示错误消息:
try {
window.someNonexistentFunction();
} catch (error){
console.log(error.message);
}
这个例子使用message 属性向用户显示错误消息。message 属性是唯一一个在IE、Firefox、Safari、
Chrome 和Opera 中都有的属性,尽管每个浏览器添加了其他属性。IE 添加了description 属性(其值
始终等于message)和number 属性(它包含内部错误号)。Firefox 添加了fileName、lineNumber
和stack(包含栈跟踪信息)属性。Safari 添加了line(行号)、sourceId(内部错误号)和sourceURL
属性。同样,为保证跨浏览器兼容,最好只依赖message 属性。
finally 子句
try/catch 语句中可选的finally 子句始终运行。如果try 块中的代码运行完,则接着执行
finally 块中的代码。如果出错并执行catch 块中的代码,则finally 块中的代码仍执行。try 或
catch 块无法阻止finally 块执行,包括return 语句。比如:
function testFinally(){
try {
return 2;
} catch (error){
return 1;
} finally {
return 0;
}
}
这个函数在try/catch 语句的各个部分都只放了一个return 语句。看起来该函数应该返回2,
因为它在try 块中,不会导致错误。但是,finally 块的存在导致try 块中的return 语句被忽略。
因此,无论什么情况下调用该函数都会返回0。如果去掉finally 子句,该函数会返回2。如果写出
finally 子句,catch 块就成了可选的(它们两者中只有一个是必需的)。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值