异常捕获

try...catch结构:

try {
//需要捕获的代码块
} catch (e) {
console.log(e.name + ": " + e.message);
console.log(e.stack);
}

catch代码块捕获错误之后,程序不会中断,会按照正常流程继续执行下去。

错误对象e有三个最基本的属性:

name:错误名称

message:错误提示信息

stack:错误的堆栈(非标准属性,但是大多数平台支持)

注意,我们还可以多次使用catch语句捕获不同类型的错误或者异常。

try...catch...finally结构:

try...catch结构允许在最后添加一个finally代码块,表示不管是否出现错误,都必需在最后运行的语句。

try {
//需要捕获的代码块
} catch (e) {
console.log(e.name + ": " + e.message);
console.log(e.stack);
}finally{
//do something...
}

就算try语句里面有return语句,也要等到finally语句执行完毕再执行return语句。

JavaScript的原生错误类型

Error对象是最一般的错误类型,在它的基础上,JavaScript还定义了其他6种错误,也就是说,存在Error的6个派生对象。

1、SyntaxError //解析代码时发生的语法错误

2、ReferenceError //引用一个不存在的变量时发生的错误

3、RangeError //当一个值超出有效范围时发生的错误

4、TypeError //变量或参数不是预期类型时发生的错误

5、URIError //URI相关函数的参数不正确时抛出的错误

6、EvalError //eval函数没有被正确执行时,会抛出EvalError错误

抛出异常(throw语句)

throw语句的作用是中断程序执行,抛出一个意外或错误。它接受一个表达式作为参数,可以抛出各种值。

throw new Error("出错了!");
throw new RangeError("出错了,变量超出有效范围!");
throw new TypeError("出错了,变量类型无效!"); throw "Error!";// 抛出一个字符串 throw 42;// 抛出一个数值 throw true;// 抛出一个布尔值 throw {toString: function() { return "Error!"; } };// 抛出一个对象

JavaScript引擎一旦遇到throw语句,就会停止执行后面的语句,并将throw语句的参数值,返回给用户。

自定义错误

除了JavaScript内建的7种错误对象,还可以定义自己的错误对象。

function UserError(message) {
this.message = message || "默认信息";
this.name = "UserError";
} UserError.prototype = new Error();
UserError.prototype.constructor = UserError;

上面代码自定义一个错误对象UserError,让它继承Error对象。然后,就可以生成这种自定义的错误了。

使用:

throw new UserError("这是自定义的错误!");

参考:

错误处理机制 -- JavaScript 标准参考教程(alpha)

http://javascript.ruanyifeng.com/grammar/error.html

js笔记——js异常处理的更多相关文章

  1. js笔记——js数据类型转换

    以下内容摘录自阮一峰的<语法概述 -- JavaScript 标准参考教程(alpha)>章节『数据类型转换』,以做备忘.更多内容请查看原文. JavaScript是一种动态类型语言,变量 ...

  2. js笔记——js里var与变量提升

    var是否可以省略 一般情况下,是可以省略var的,但有两点值得注意: 1.var a=1 与 a=1 ,这两条语句一般情况下作用是一样的.但是前者不能用delete删除.不过,绝大多数情况下,这种差 ...

  3. js笔记——js里的null和undefined

    以下内容摘录自阮一峰的<语法概述 -- JavaScript 标准参考教程(alpha)>章节『5.null和undefined』,以做备忘. null与undefined都可以表示&qu ...

  4. 【repost】JS中的异常处理方法分享

    我们在编写js过程中,难免会遇到一些代码错误问题,需要找出来,有些时候怕因为js问题导致用户体验差,这里给出一些解决方法 js容错语句,就是js出错也不提示错误(防止浏览器右下角有个黄色的三角符号,要 ...

  5. require.js笔记

    笔记参考来源:阮一峰  http://www.ruanyifeng.com/blog/2012/10/javascript_module.html   1. 浏览器端的模块只能采用“异步加载”方式 = ...

  6. JS笔记 入门第一

    WHY? 一.你知道,为什么JavaScript非常值得我们学习吗? 1. 所有主流浏览器都支持JavaScript. 2. 目前,全世界大部分网页都使用JavaScript. 3. 它可以让网页呈现 ...

  7. js中的异常处理

    js中的异常处理语句有两个,一个是try……catch……,一个是throw. try……catch用于语法错误,错误有name和message两个属性.throw用于逻辑错误. 对于逻辑错误,js是 ...

  8. Node.js 笔记02

    一.关于命令 常用命令: dir 列出当前目录下面所有的文件 cd 目录名 进入到指定的目录,. 当前目录, .. 进入上级目录,cd . 当前目录, cd .. 上级目录 md 目录名 创建文件夹 ...

  9. 前端初学者——初探Modernizr.js Modernizr.js笔记

    什么是Modernizr? Modernizr 是一个用来检测浏览器功能支持情况的 JavaScript 库. 目前,通过检验浏览器对一系列测试的处理情况,Modernizr 可以检测18项 CSS3 ...

随机推荐

  1. HDU Math Problems

    1576 const int mod = 9973; n = a - a / mod * mod; a / b = ans; ans * b = a = a / mod * mod + n; n = ...

  2. spring的beans.xml中classpath

    classpath就是代表 /WEB-INF /classes/ 这个路径(如果不理解该路径,就把一个web工程发布为war包,然后用winrar查看其包内路径就理解啦) 常用的场景: 在SSH架构中 ...

  3. Java实现Excel导入数据库,数据库中的数据导入到Excel

    private static void executeMethod(JobExecutionContext arg0) throws Exception{ try { TContrastService ...

  4. JQuery FullCalendar(一)

    FullCalendar官网:http://arshaw.com/fullcalendar FullCalendar中文API:http://blog.sina.com.cn/s/blog_9475b ...

  5. tail queue代码阅读

    tail queue是bdb中用的最多的数据结构. 定义在 src/dbinc/queue.h: 注: TRACEBUF,QMD_TRACE_HEAD等是为了 queue代码的debug, 这里移除出 ...

  6. jsp入门笔记

    jsp语法 1. declaration 由于访问serlvet只有一个,<%! int i = 0; %>   是servlet的变量,刷新时会不断增加 <% int i = 0; ...

  7. Pip Permittion Issue on MacOS

    Question: OSError: [Errno 1] Operation not permitted: '/tmp/pip-W13DsU-uninstall/System/Library/Fram ...

  8. ListView组件应用源码

    首先在xml文件中定义ListView组件 <ListView android:id="@+id/show_view_list" android:layout_width=& ...

  9. 《利用Python进行数据分析》第6章学习笔记

    数据加载.存储与文件格式 读写文本格式的数据 逐块读取文本文件 read_xsv参数nrows=x 要逐块读取文件,需要设置chunksize(行数),返回一个TextParser对象. 还有一个ge ...

  10. 安装RPM包或者安装源码包

    本系列的博客来自于:http://www.92csz.com/study/linux/ 在此,感谢原作者提供的入门知识 这个系列的博客的目的在于将比较常用的liunx命令从作者的文章中摘录下来,供自己 ...