当前位置:网站首页>js中try...catch和finally的用法
js中try...catch和finally的用法
2022-08-05 01:55:00 【小太阳...】
定义和用法:
try/catch/finally 语句用于处理代码中可能出现的错误信息。
错误可能是语法错误,通常是程序员造成的编码错误或错别字。也可能是拼写错误或语言中缺少的功能(可能由于浏览器差异)。
try语句允许我们定义在执行时进行错误测试的代码块。
catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。
finally 语句在 try 和 catch 之后无论有无异常都会执行。
注意: catch 和 finally 语句都是可选的,但你在使用 try 语句时必须至少使用一个。
try {
tryCode - 尝试执行代码块 // 如果出错,抛出错误
}
catch(err) {
catchCode - 捕获错误的代码块
}
finally {
finallyCode - 无论 try / catch 结果如何都会执行的代码块
}
提示: 当错误发生时, JavaScript 会停止执行,并生成一个错误信息。使用 throw 语句 来创建自定义消息(抛出异常)。如果你将 throw 和 try 、 catch一起使用,就可以控制程序输出的错误信息。
比如:如果值是错误的,会抛出一个异常(错误)。catch 会捕捉到这个错误,并显示一段自定义的错误消息:
var obj = {
name: 'sun'};
try {
if(!obj.age) throw 'age不存在'
} catch(err) {
console.log("错误信息:" + err);
}
// 错误信息:age不存在
运行流程:
先执行try里面的代码,如果try里面的代码有错误,就执行catch里面的代码,否则不执行catch里面的代码
下面是一个例子:
var obj = {
name: 'sun'};
try {
console.log(obj.age.msg)
} catch(err) {
console.log("错误信息:" + err.message);
}
// 错误信息:Cannot read properties of undefined (reading 'msg')
用途:一般用于可控的错误,而不是未知的错误,意思就是你很清楚这里可能出错,而且你很清楚什么前提下会出错,你就是要故意利用报错信息来区分错误,就可以把这段代码放进try内,然后出错误的时候就会自动去执行catch里面的代码。
场景:
1.浏览器兼容问题
每个浏览器都有自身的兼容问题,所以try catch能很好的将异常捕获,每个浏览器的异常报错提示也是不一样的,我们就可以在catch里面将报错抛出并作出对应的措施。
2.判断代码非法性
try{
console.log(sun)
}
catch(e){
console.log('捕获到异常:',e);
}
// 捕获到异常: ReferenceError: sun is not defined
注意:合法判断不会走catch
比如:
try{
1===2
}
catch{
console.log("不执行")
}
// false
3.try catch只能捕捉到同步的异常,异步的异常无法捕获
try{
setTimeout(()=>{
console.log(sun)
},1000)
}
catch(e){
console.log('捕获到异常:',e);
}
// 报错:Uncaught ReferenceError: sun is not defined
思考:面试的时候面试官问到了怎么终止forEach的循环
答案: 用try…catch
边栏推荐
- Oracle encapsulates restful interfaces into views
- Live preview | 30 minutes started quickly!Look at credible distributed AI chain oar architectural design
- The use of pytorch: temperature prediction using neural networks
- KingbaseES V8 GIS data migration solution (2. Introduction to the capabilities of Kingbase GIS)
- 【Redis】Linux下Redis安装
- 进程在用户态和内核态的区别[独家解析]
- ".NET IoT from scratch" series
- 英特尔 XDC 2022 精彩回顾:共建开放生态,释放“基建”潜能
- 第09章 性能分析工具的使用【2.索引及调优篇】【MySQL高级】
- How do programmers without objects spend the Chinese Valentine's Day
猜你喜欢
行业现状?互联网公司为什么宁愿花20k招人,也不愿涨薪留住老员工~
iNFTnews | 对体育行业和球迷来说,NFT可以带来什么?
测试工作这么难找吗?今年32,失业2个月,大龄测试工程师接下来该拿什么养家?
Day Fourteen & Postman
1349. 参加考试的最大学生数 状态压缩
Understand the recommendation system in one article: Recall 06: Two-tower model - model structure, training method, the recall model is a late fusion feature, and the sorting model is an early fusion
Utilities How do programmers without objects spend the Chinese Valentine's Day
直播回放含 PPT 下载|基于 Flink & DeepRec 构建 Online Deep Learning
Jincang database KingbaseES V8 GIS data migration solution (3. Data migration based on ArcGIS platform to KES)
随机推荐
(十七)51单片机——AD/DA转换
Are testing jobs so hard to find?I am 32 this year and I have been unemployed for 2 months. What should an older test engineer do next to support his family?
在这个超连接的世界里,你的数据安全吗
没有对象的程序员如何过七夕
A new technical director, who calls DDD a senior, is convinced
HOG feature study notes
记录谷歌gn编译时碰到的一个错误“I could not find a “.gn“ file ...”
Three handshake and four wave in tcp
为什么他们选择和AI恋爱?
std::string::find 返回值的坑
DDOS攻击真的是无解吗?不!
[Unity Entry Plan] Handling of Occlusion Problems in 2D Games & Pseudo Perspective
Xunrui cms website cannot be displayed normally after relocation and server change
the mechanism of ideology
一文看懂推荐系统:召回06:双塔模型——模型结构、训练方法,召回模型是后期融合特征,排序模型是前期融合特征
1349. 参加考试的最大学生数 状态压缩
XMjs跨域问题解决
MySQL学习
树形查找(二叉查找树)
【PyQT5 绑定函数的传参】