JS异常简单处理
有时候JS某一处报错会导致整个页面JS的运行出问题,于是想的简单研究一下JS的错误处理机制。更详细的可以自己参考网站研究: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Errors
1.两个经常可能出现的错误
1.变量未定义
<!--异常JS,会导致后面的不能正常运行-->
<script type="text/javascript">
alert(b)
alert("这里是异常后的语句")
</script>
界面报错:
2.语法错误
<!--2.SyntaxError (语法错误异常) 测试-->
<script>
alert("sss"ssss"") //SyntaxError
</script>
界面报错:
2. 针对上面两个错误进行简单处理(以第一个错误为例子)。。自己感觉JS错误机制特别像Java的异常机制
1.try...catch... 进行简单处理
<!--try catch的使用-->
<script type="text/javascript">
try{
alert(b);
alert("这里是异常后的语句");//发生异常,所以不会执行到这里
}catch(error){
alert("发生异常了")
}
</script>
2.try..catch...finally...的使用
<!--try catch finally的使用-->
<script type="text/javascript">
try {
alert(b);
alert("这里是异常后的语句"); //发生异常,所以不会执行到这里
} catch (error) {
debugger
alert("发生异常了")
} finally {
alert("无论如何这里都会打印");
}
</script>
3.也可以直接try...finally...进行处理
<!--try finally的使用-->
<script type="text/javascript">
try{
alert(b);
alert("这里是异常后的语句");//发生异常,所以不会执行到这里
}finally{
alert("无论如何这里都会打印");
}
</script>
3.常见的错误类型
JS定义了7种错误类型,如下:
- Error ‰
- EvalError
- RangeError ‰
- ReferenceError ‰
- SyntaxError ‰
- TypeError ‰
- URIError
说明:
- Error类型是基本的错误类型,其他类型都继承自这个类型。
- EvalError 类型的错误会在使用 eval()函数而发生异常时被抛出
- TypeError 类型在 JavaScript 中会经常用到,在变量中保存着意外的类型时,或者在访问不存在的 方法时,都会导致这种错误
- 一般情况,不同的错误,处理方式不一样。
例如:
<!--try catch finally的使用-->
<script type="text/javascript">
try {
alert(b)
alert("这里是异常后的语句"); //发生异常,所以不会执行到这里
} catch (err) {
alert(err.name)//打印错误类型 ReferenceError
alert(err.message)//打印错误消息 b is not defined
if (err instanceof ReferenceError) {
alert("发生引用异常了")
} else if (err instanceof SyntaxError) {
alert("发生语法异常了")
} else {
alert("发生其他异常了")
}
} finally {
alert("无论如何这里都会打印");
}
</script>
4.巧用throw关键字抛出异常
1.抛出JS内置的错误异常类型
例如:
<script type="text/javascript">
function testerr() {
try {
alert(b)
alert("这里是异常后的语句"); //发生异常,所以不会执行到这里
} catch (err) {
if (err instanceof ReferenceError) {
throw new Error("引用异常");
} else if (err instanceof SyntaxError) {
throw new Error("语法异常");
} else {
throw new Error("其他异常");
}
}
} try{
testerr();
}catch(err){
alert(err.message)
}
</script>
会弹出 引用异常。
2.抛出自定义的错误异常类型
<script type="text/javascript">
/**
* 自定义异常类
* @param {Object} name 异常名称
* @param {Object} message 异常信息
*/
function MyError(name,message){
this.name = name;
this.message = message;
} function testerr() {
try {
alert(b)
alert("这里是异常后的语句"); //发生异常,所以不会执行到这里
} catch (err) {
if (err instanceof ReferenceError) {
throw new MyError("yyyc","引用异常");
} else if (err instanceof SyntaxError) {
throw new MyError("yyyc","语法异常");
} else {
throw new MyError("qtyc","其他异常");
}
}
} try{
testerr();
}catch(err){
alert(err.message)
alert(err.name)
} </script>
结果会弹出 引用异常 yyyc
5.项目种使用try...catch...
今天在使用amcharts插件的时候快速点击按钮刷新页面的时候报错,估计原因是刷新太快导致插件根据ID获取元素的时候获取不到元素,但是调用innerHtml的时候报错。
最后我的解决办法是try...catch... 包住报错的代码,在catch种用console.log打印记录错误信息。
而且try...catch...结合console.log也可以帮我们排错,每次try...catch...一小块代码,并且cosole.log()错误信息可以定位到出错的代码
在JS脚本的编写中,console.log也是进行日志记录的一种常用方式,类似于 我们在Java中的Logger进行日志记录,便于我们排错。
JS异常简单处理的更多相关文章
- JS 异常: Uncaught RangeError: Maximum call stack size exceeded
遇到了这个js异常, 总是吧浏览器搞崩溃,这是什么原因呢? 开始我也只能想到死循环, 也许是哪个条件判断写错了,其实不是.经过google,发现了一篇文章,内容请看: ================ ...
- JS的简单用法
JS的简单用法 参考:http://www.w3school.com.cn/js/js_switch.asp JavaScript 是网络的脚本语言 JavaScript 是可插入 HTML 页面的编 ...
- 原生JS封装简单动画效果
原生JS封装简单动画效果 一致使用各种插件,有时候对原生JS陌生了起来,所以决定封装一个简单动画效果,熟悉JS原生代码 function animate(obj, target,num){ if(ob ...
- Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换
Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换 { "@type":"java.lang.Runti ...
- HTML(.js) – 最简单的方式操作 DOM 的 JS 库
HTML(.js) 是一个轻量的(压缩后~2kb) JavaScript 库,简化了与 DOM 交互的方法. 这个 JavaScript 库的方法可读性很好,并具有搜索和遍历 DOM 的方法.相比 j ...
- Sea.js提供简单、极致的模块化开发体验
为什么使用 Sea.js ? Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码. ...
- 投票系统 & js脚本简单刷票
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 基于vue.js的简单用户管理
功能描述:添加.修改.搜索过滤 效果图: <!DOCTYPE html> <html lang="en"> <head> <title&g ...
- JS实现简单的运行代码 & 侧边广告
/* JS实现简单的运行代码功能 */<!doctype html> <html> <head> <meta charset="utf-8" ...
随机推荐
- Notes of Daily Scrum Meeting(11.12)
今天我们召开了Beta阶段MOOC项目开发的第一次Scrum Meeting,在会上就alpha阶段进行了总结,然后我们确定了 接下来的Beta阶段的项目分工,并且就每天的进度汇报做了一个约定,就是每 ...
- 第二阶段Sprint9
昨天:重新规划主界面,把视频录制暂放到主页面里 今天:查看有关“共享平台”的资料,看如何实现上传下载功能,并尝试编码, 遇到的问题:看不懂什么意思,照例子做不行,还得需要联网等
- android开发心得之知识的量变到质变
随着身边越来越多的人开始了尝试android开发,看着他们一点点学期 从nodepad++写代码 cmd 执行,到安装eclipse 和android SDK,仿佛看到了昨天的我一样,一样勤勤恳恳的学 ...
- XenServer DVSC
DVSC: Distribute Virtual Swithc Controller(分布式虚拟交换机控制器). DVSC是一种逻辑的集中式的虚拟交换机,它能让你控制来自于不同XenServer Ho ...
- Java对象与Map间相互转换
将Java对象转为一个Map,以及将map转为对应Java对象,代码如下: public class BeanMapUtil { private static ConcurrentHashMap< ...
- CentOS系统下安装 LNAM环境
系统需求: CentOS/RHEL/Fedora/Debian/Ubuntu/Raspbian Linux系统 需要3GB以上硬盘剩余空间 128M以上内存,Xen的需要有SWAP,OpenVZ的另外 ...
- 解决telnet不是内部命令
1.telnet在win7下默认是不开启的,所以需要我们自己手动开启.那么首先我们点击开始菜单,找到控制面板项,点击进入: 2.进入程序和功能模块,我们在左边需要选择“打开或关闭windows功能”, ...
- 以 BZOJ 2002 为例学习有根树LCT(Link-Cut Tree)
以BZOJ 2002 弹飞绵羊为例学习有根树LCT(Link-Cut Tree) 注:本文非常简单,只涉及有根树LCT,对于无根树,LCT还有几个本文没有提到的操作,以后慢慢更新 =v= 知识储备 [ ...
- sql server 小技巧 集锦
sql server 小技巧(1) 导入csv数据到sql server sql server 小技巧(2) 删除sql server中重复的数据 sql server 小技巧(3) SQL Serv ...
- 洛谷 P1073 最优贸易 解题报告
P1073 最优贸易 题目描述 \(C\)国有\(n\)个大城市和\(m\)条道路,每条道路连接这\(n\)个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这\(m\)条道路中有一部分 ...