try/catch语句
try/catch语句
try/catch作为JavaScript处理异常的一种的方式,使用方法跟很多语言都是一样的。
try{// 未知的代码
}
catch(error){// 代码异常时所要做的事
}
任何可能出错的代码放在try代码块里面,处理异常的代码就放在catch代码块里面。只要try代码块里面的代码出现了错误,就会直接执行退出,跳到catch里。catch接受一个参数对象,代码异常跳到catch时,该对象接收一个发生错误的的信息。
catch和其他的语言有点不一样,就算你不使用错误对象,你也必须要给他定义。否则就会抛出安全错误信息。错误对象的错误信息因浏览器而不一样。每个浏览器对错误对象都有自己的定义,可能有部分相同,都有自己的属性定义。但至少的都保存有保存错误信息的message的属性。message属性时唯一一个在主流浏览器同时存在的的属性。
try{...
}catch(error){console.log(error.message); // 显示错误原因的信息console.log(error); // 也可以直接输出显示整个错误对象
}
IE添加了description属性(其值始终等于message)和number属性(它包含内部错误号)。Firefox添加了fileName、lineNumber和stack(包含栈跟踪信息)属性。Safari添加了line(行号)、sourceId(内部错误号)和sourceURL属性。为了让不同的浏览器都可以运行,使用message属性是很不错的选择。
finally 子句
在try/catch语句中,finally子句是可选的,只要写上子句,不管try/catch怎么运行,子句都会执行。
try{// 未知的代码return 1;
}
catch(error){// 代码异常时所要做的事return error;
}finally{// 子句return 2;
}
上面的一段代码,怎么看return都是会返回1,但是返回的时侯永远是2,try模块和catch模块阻止不了子句的运行,return语句也不可以。就选try模块里的代码出现异常,运行catch模块的代码,子句同样的还是会运行。finally子句的存在,让引擎忽略掉了try模块和catch模块里面的return语句。所以只要写上finally子句,返回的永远是子句里的return返回的。
错误类型
代码运行过程中会发生各种各样的异常,每一种异常会抛出一种错误异常。
- Error
- InternalError
- EvalError
- RangeError
- ReferenceError
- SyntaxError
- TypeError
- URIError
Error:是基类型,其他错误类型继承该类型。一般是不会抛出这个错误类型的,这个类型错误是开发者抛出自定义错误。
InternalError:这个类型错误是JavaScript底层发生错误有浏览器抛出的错误,一般显示这个错误类型的话,就是你的代码存在危险行为。也就是递归过多导致栈溢出。
EvalError:在使用eval()函数时不直接调用产生。还有一种是给eval()赋值会抛出错误。简单说呢,就是只要不把eval()当成函数直接使用,救会抛出这个错误。在实践中借本不会使用这个函数,所以基本见不到这个错误。
RangeError :会在超出数值的限制时抛出。例如:数组
new Array(-1);
// 控制台抛出的一种错误消息
Uncaught RangeError: Maximum call stack size exceeded
因为数组没有这个长度的定义,所以就会抛出RangeError错误。或者说给的长度值超出了数组的最大长度值,也是会抛出错误。一般说只要正确的赋值是不会出现什么问题的。
ReferenceError :在找不到对象时抛出错误,这个问题经常是在使用了还没有赋值的变量抛出。
SyntaxError :一般是在给eval()传入的字符串包含JavaScript语法错误时发生。因为JavaScript代码中的语法错误会导致代码无法执行。,所以一般情况下是不会见到它的,因为eval()也是不经常用到的。
eval("a ++ b"); // SyntaxError
TypeError :类型错误。这是在实践中经常能看到的一种错误。抛出的原因也是比较多,主要是在使用特定类型的操作的是时候变量的类型不符合时抛出。访问不存在的方法时也会抛出。
new 10;
Uncaught TypeError: 10 is not a constructor at ***
URIError :只会在使用encodeURI()或decodeURI()但传入了格式错误的URI时发生。这个错误应该是JavaScript中非常难得一见的错误了。
不同的类型错误会抛出不同的类型错误信息,这样就更加方便的让开发者去修改错误了。
在try/catch模块中,可以使用instanceof来判断错误信息的类型。
try{// 未知的代码return null;
}
catch(error){// 代码异常时所要做的事if(error instanceof TypeError){// 类型错误,然后下面就是写处理类型错误的代码,再返回就可以了}else if(...){...}
}
try/catch最好是用在自己无法掌握的代码的上。例如你需要调用某个库的某个函数,但是哪个函数有可能会由于一些原因会发生错误,这时候就有必要使用try/catch来把函数包装起来,进行处理。
在明知道的这是会发生错误的情况下,就不需要用到try/catch了,这时候应该找出错误并把代码修改过来。
try/catch语句相关推荐
- try~Catch语句中异常的处理过程
[2014/10/12 21:40]文章待续~ 1.函数自身捕获处理异常的情况 以下的样例介绍了try~catch语句中出现异常时语句的运行顺序: package month10;import jav ...
- java多层catch语句_Java异常之catch语句块
今天在阅读项目代码时看到如下奇怪的代码,以为是竖线 | 可以作为多类型赋值,经过网上搜索才知道是Java SE 7新增的功能:一个catch捕获多种类型的异常.原文是Java官方的文档,现翻译如下.红 ...
- try catch语句 java_深入剖析java的try…catch…finally语句
一.前言 前些天参加面试的时候有一道题: public classtest { public static voidmain(String[] args){try{return; }finally{ ...
- JavaScript中的Try...Catch 语句
try...catch 的作用是测试代码中的错误. 有两种在网页中捕获错误的方法: (1)使用 try...catch 语句.(在 IE5+.Mozilla 1.0.和 Netscape 6 中可用) ...
- 1.5 try catch语句详解
在实际应用中,对于错误的处理是极其重要的,任何程序都很难做到百分百完美,程序中可能存在大量未知问题,所以程序开发时一定要对各种问题进行相应的处理,而 Java 提供的异常处理机制可以帮用户更好地解决这 ...
- Java 多重catch语句的使用
某些情况,由单个代码段可能引起多个异常.处理这种情况,你可以定义两个或更多的catch子句,每个子句捕获一种类型的异常.当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句执行.当 ...
- c++ try catch语句_再问你一遍,你真的了解try..catch(finally)吗???
定义 首先来看下 MDN 的定义: The try...catch statement marks a block of statements to try and specifies a respo ...
- C++ 异常,标准异常类,自定义异常类,throw,try,catch语句
要学习异常,首先就要学习throw和try,catch语句: C++中try catch语句用法有非常灵活,有许多种组合: 这里简单介绍以下最基本的用法: 1. 格式 try{ ... } catch ...
- Java try catch语句详解
在实际应用中,对于错误的处理是极其重要的,任何程序都很难做到百分百完美,程序中可能存在大量未知问题,所以程序开发时一定要对各种问题进行相应的处理,而 Java 提供的异常处理机制可以帮用户更好地解决这 ...
- catch 语句的参数
catch 语句的参数 目前,有一个提案,允许try...catch结构中的catch语句调用时不带有参数.这个提案跟参数有关,也放在这一章介绍. 传统的写法是catch语句必须带有参数,用来接收tr ...
最新文章
- 自动驾驶中图像与点云融合的深度学习研究进展综述
- AI 如果 “智力爆炸” ,只有普通智力的人类是蝼蚁还是宠物?
- 网站优化时不容错过的时期有哪几个?
- Hadoop集群完全分布式模式环境部署
- 认清JavaScript和JAVA全局变量和局部变量的作用域
- html使用js的变量_JS变异小技巧:使用JavaScript全局变量绕过XSS过滤器
- javascript 练习(2)——js数组去重
- mysql 可视化监控_基于Prometheus构建MySQL可视化监控平台
- Java基础学习总结(180)——如何保证API接口安全
- docker mysql 远程连接_Docker MySQL的安装与远程连接
- linux X11窗口转发配置简记
- Oracle null 处理
- linux 以某个用户执行,Linux下以其他用户运行程序
- 一颗电阻失效引发的设计思考
- 孙玄:大中台模式下如何构建复杂业务核心状态机组件
- 华为数字化IT应用工程师面试经历
- 计算机学院教师老带新总结,班主任以老带新工作总结(共6篇)
- iso文件连接服务器访问路由器硬盘,多种系统下访问路由器硬盘的方法 | 192路由网...
- 二层交换机和三层交换机
- 大数据发展促进委员会在京成立