有时候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

说明:

  1. Error类型是基本的错误类型,其他类型都继承自这个类型。
  2. EvalError 类型的错误会在使用 eval()函数而发生异常时被抛出
  3. TypeError 类型在 JavaScript 中会经常用到,在变量中保存着意外的类型时,或者在访问不存在的 方法时,都会导致这种错误
  4. 一般情况,不同的错误,处理方式不一样。

例如:

    <!--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异常简单处理的更多相关文章

  1. JS 异常: Uncaught RangeError: Maximum call stack size exceeded

    遇到了这个js异常, 总是吧浏览器搞崩溃,这是什么原因呢? 开始我也只能想到死循环, 也许是哪个条件判断写错了,其实不是.经过google,发现了一篇文章,内容请看: ================ ...

  2. JS的简单用法

    JS的简单用法 参考:http://www.w3school.com.cn/js/js_switch.asp JavaScript 是网络的脚本语言 JavaScript 是可插入 HTML 页面的编 ...

  3. 原生JS封装简单动画效果

    原生JS封装简单动画效果 一致使用各种插件,有时候对原生JS陌生了起来,所以决定封装一个简单动画效果,熟悉JS原生代码 function animate(obj, target,num){ if(ob ...

  4. Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换

    Atitit 跨平台异常处理(2)--------异常转换 -----java c# js异常对象结构比较and转换 { "@type":"java.lang.Runti ...

  5. HTML(.js) – 最简单的方式操作 DOM 的 JS 库

    HTML(.js) 是一个轻量的(压缩后~2kb) JavaScript 库,简化了与 DOM 交互的方法. 这个 JavaScript 库的方法可读性很好,并具有搜索和遍历 DOM 的方法.相比 j ...

  6. Sea.js提供简单、极致的模块化开发体验

    为什么使用 Sea.js ? Sea.js 追求简单.自然的代码书写和组织方式,具有以下核心特性: 简单友好的模块定义规范:Sea.js 遵循 CMD 规范,可以像 Node.js 一般书写模块代码. ...

  7. 投票系统 & js脚本简单刷票

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. 基于vue.js的简单用户管理

    功能描述:添加.修改.搜索过滤 效果图: <!DOCTYPE html> <html lang="en"> <head> <title&g ...

  9. JS实现简单的运行代码 & 侧边广告

    /* JS实现简单的运行代码功能 */<!doctype html> <html> <head> <meta charset="utf-8" ...

随机推荐

  1. Top 10 Javascript MVC 框架

    在网上偶然看到了,几种MVC框架各有优缺点,但Backbone和Ember的呼声相对更高-大家参考一下哈- http://codebrief.com/2012/01/the-top-10-javasc ...

  2. Redis学习笔记之入门基础知识——其他特性

    1.订阅(subscribe)与发布(publish) 用户订阅某一个频道,频道发布新的信息时,会将信息告知用户 2.数据安全 1)     快照持久化(时间点转储,实质是数据副本) 操作:SAVA. ...

  3. 《linux内核设计与实现》第一章

    第一章Linux内核简介 一.unix 1.Unix的历史 Unix是现存操作系统中最强大和最优秀的系统. ——1969年由Ken Thompson和Dernis Ritchie的灵感点亮的产物. — ...

  4. 《Linux内核设计与实现》学习记录一

    chapter1 Linux内核简介 前言:Unix是一个具有相似应用程序编程接口(API)并且基于相似设计理念的操作系统家族. 1.1 Unix的历史 1.Unix演化版实现了任务管理.换页机制.T ...

  5. 《Linux内核分析》第二周:操作系统是如何工作的

    杨舒雯 20135324 北京电子科技学院 杨舒雯 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1 ...

  6. 组件 -- Badge

    .badge :长方形的徽章 badge的颜色: .badge-primary .badge-secondary .badge-success .badge-warning ... ... .badg ...

  7. PAT 1063 计算谱半径

    https://pintia.cn/problem-sets/994805260223102976/problems/994805267860930560 在数学中,矩阵的“谱半径”是指其特征值的模集 ...

  8. [转帖]PG的简单备份恢复 找时间进行测试

    转帖PG的简单使用 https://blog.csdn.net/lk_db/article/details/77971634 一: 纯文件格式的脚本: 示例:1. 只导出postgres数据库的数据, ...

  9. Yii 框架的Rbac [权限控制]

    转载自 xmlife 的博客 : http://blog.csdn.net/xmlife/article/details/50733451 1.首先我们要在配置文件的组件(component)里面配置 ...

  10. SpringBoot 2.SpringBoot整合Mybatis

    一.创建Springboot的配置文件:application.properties,并添加MyBatis依赖 SpringApplication 会从 application.properties  ...