异常捕获

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. ASP.net分别连接SQLserver数据库与连接Access数据库精英版

    -------------------------连接access2003 字符串------------------------- Provider=Microsoft.Jet.OLEDB.4.0; ...

  2. 安装vs2010,vs2015后,删除2015,导致vs2016打不开

    报错:Cannot evaluate the property expression "$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(M ...

  3. Win7 64位 VS2013环境编译Squirrel 3.0.7

    Squirrel是一个类似Lua,但是更面向对象的脚本语言. 国内这个介绍很少,环境配置更是没有任何文章提到,花了点时间搞定了,备忘记录下过程. 首先是下载,写本文时Squirrel最新版本为3.0. ...

  4. setenv.bat

    @echo off rem Licensed to the Apache Software Foundation (ASF) under one or more rem contributor lic ...

  5. 写好Hive 程序的若干优化技巧和实际案例

    使用Hive可以高效而又快速地编写复杂的MapReduce查询逻辑.但是一个”好”的Hive程序需要对Hive运行机制有深入的了解,像理解mapreduce作业一样理解Hive QL才能写出正确.高效 ...

  6. javascript练习-私有状态

    在经典的面向对象编程中,经常需要将对象的某个状态封装或隐藏在对象内,只有通过对象的方法才能访问这些状态,对外只暴露一些重要的状态可以直接编写.这是就需要私有状态. function Range(fro ...

  7. 日常工作中的点滴:C# 根据字节长度截包含中文的字符串

    方法中利用正则表达式判断某个字符是否是中文 public string SubStringB(string text,int length){ int target=0; int b=0; for(i ...

  8. M1M2总结

    这个学期很开心可以和一帮兄弟姐妹们一起做软件写代码,总体看下来真的是充满哦了艰辛和困苦.虽然我是负责软件测试的这一块的,但是看着他们辛苦的写代码我也很是为他们着急和心疼.毕竟,编译当头,数据库辅助,每 ...

  9. Activity劫持实例与防护手段

    原文地址:Activity劫持实例与防护手段 作者:cjxqhhh (本文只用于学习技术,提高大家警觉,切勿用于非法用途!)   什么叫Activity劫持   这里举一个例子.用户打开安卓手机上的某 ...

  10. 【转】java调用webservice

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为 ...