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语句相关推荐

  1. try~Catch语句中异常的处理过程

    [2014/10/12 21:40]文章待续~ 1.函数自身捕获处理异常的情况 以下的样例介绍了try~catch语句中出现异常时语句的运行顺序: package month10;import jav ...

  2. java多层catch语句_Java异常之catch语句块

    今天在阅读项目代码时看到如下奇怪的代码,以为是竖线 | 可以作为多类型赋值,经过网上搜索才知道是Java SE 7新增的功能:一个catch捕获多种类型的异常.原文是Java官方的文档,现翻译如下.红 ...

  3. try catch语句 java_深入剖析java的try…catch…finally语句

    一.前言 前些天参加面试的时候有一道题: public classtest { public static voidmain(String[] args){try{return; }finally{ ...

  4. JavaScript中的Try...Catch 语句

    try...catch 的作用是测试代码中的错误. 有两种在网页中捕获错误的方法: (1)使用 try...catch 语句.(在 IE5+.Mozilla 1.0.和 Netscape 6 中可用) ...

  5. 1.5 try catch语句详解

    在实际应用中,对于错误的处理是极其重要的,任何程序都很难做到百分百完美,程序中可能存在大量未知问题,所以程序开发时一定要对各种问题进行相应的处理,而 Java 提供的异常处理机制可以帮用户更好地解决这 ...

  6. Java 多重catch语句的使用

    某些情况,由单个代码段可能引起多个异常.处理这种情况,你可以定义两个或更多的catch子句,每个子句捕获一种类型的异常.当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句执行.当 ...

  7. c++ try catch语句_再问你一遍,你真的了解try..catch(finally)吗???

    定义 首先来看下 MDN 的定义: The try...catch statement marks a block of statements to try and specifies a respo ...

  8. C++ 异常,标准异常类,自定义异常类,throw,try,catch语句

    要学习异常,首先就要学习throw和try,catch语句: C++中try catch语句用法有非常灵活,有许多种组合: 这里简单介绍以下最基本的用法: 1. 格式 try{ ... } catch ...

  9. Java try catch语句详解

    在实际应用中,对于错误的处理是极其重要的,任何程序都很难做到百分百完美,程序中可能存在大量未知问题,所以程序开发时一定要对各种问题进行相应的处理,而 Java 提供的异常处理机制可以帮用户更好地解决这 ...

  10. catch 语句的参数

    catch 语句的参数 目前,有一个提案,允许try...catch结构中的catch语句调用时不带有参数.这个提案跟参数有关,也放在这一章介绍. 传统的写法是catch语句必须带有参数,用来接收tr ...

最新文章

  1. 自动驾驶中图像与点云融合的深度学习研究进展综述
  2. AI 如果 “智力爆炸” ,只有普通智力的人类是蝼蚁还是宠物?
  3. 网站优化时不容错过的时期有哪几个?
  4. Hadoop集群完全分布式模式环境部署
  5. 认清JavaScript和JAVA全局变量和局部变量的作用域
  6. html使用js的变量_JS变异小技巧:使用JavaScript全局变量绕过XSS过滤器
  7. javascript 练习(2)——js数组去重
  8. mysql 可视化监控_基于Prometheus构建MySQL可视化监控平台
  9. Java基础学习总结(180)——如何保证API接口安全
  10. docker mysql 远程连接_Docker MySQL的安装与远程连接
  11. linux X11窗口转发配置简记
  12. Oracle null 处理
  13. linux 以某个用户执行,Linux下以其他用户运行程序
  14. 一颗电阻失效引发的设计思考
  15. 孙玄:大中台模式下如何构建复杂业务核心状态机组件
  16. 华为数字化IT应用工程师面试经历
  17. 计算机学院教师老带新总结,班主任以老带新工作总结(共6篇)
  18. iso文件连接服务器访问路由器硬盘,多种系统下访问路由器硬盘的方法 | 192路由网...
  19. 二层交换机和三层交换机
  20. 大数据发展促进委员会在京成立

热门文章

  1. artdialog html4,js插件之artDialog
  2. 全国青少年电子信息智能创新大赛(决赛)python·模拟二卷,含答案解析
  3. 用一个辅助栈实现对另一个栈的排序
  4. PHP常用框架有哪些
  5. (超详细)单臂路由及操作步骤
  6. python的默认安装位置
  7. 微服务架构 | 服务注册发现中心/配置中心/消息总线 - [nacos]
  8. linux-文件搜索命令grep
  9. 策略模式和工厂模式在促销系统下的应用
  10. 安装Office office Tool 一键解决,选择性安装功能