一、Javascript的异常处理机制

当javascript代码中出现错误的时候,js引擎就会根据js的调用栈逐级寻找对应的catch,如果没有找到相应的catch handler或catch handler本身又有error或者又抛出新的error,最后就会把这个error的处理交给浏览器,浏览器会用各自不同的方式(IE以黄色三角图案 显示在左下角,而firefix会显示在错误控制台中)显示错误信息给访问者.

如:在火狐下(工具)

在IE下,表现为 左下角黄色感叹号

二、try/catch/finally

是js提供的异常处理机制,用法如下:

try {
// 这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行}
catch (e) {
// 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
// e是一个局部变量,用来指向Error对象或者其他抛出的对象
}
finally {
  //无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行
}

如:

 1 function tr(){
2 try{
3 abc
4 }catch(e){
5 document.writeln("错误名称:"+e.name);
6 document.writeln("错误信息:"+e.message);
7 }
8 finally{
9 alert('异常处理');
10 }
11 }
12
13 <button onclick="tr()">try/catch/finally示例</button>

则显示:错误名称:ReferenceError 错误信息:abc is not defined

它们组合成三种形式try..catch..finally;try...catch;try..finally

三、throw()

语法:throw expression
其中的expression可以是任何一种类型,通常我们会抛出一个Error对象或是Error对象的子类。

1 function thr(x){
2 if(x<0) throw new Error('x must not be negative')
3 return x;
4 }
5 <button onclick="thr(-2)">throw()示例</button>

则调试中出现:

四、Error对象

Error的构造函数有两种:

new Error()
new Error(message)

Error有两个基本的属性name和message。message用来表示异常的详细信息。而name指的的是Error对象的构造函数。此外,不同的js引擎对Error还各自提供了一些扩展,例如mozilla提供了fileName(异常出现的文件名称)和linenumber(异常出现的行号)的扩展,而IE提供了number(错误号)的支持。不过name和message是两个基本的属性,在firefox和ie中都能够支持。

Error.name的取值一共有六种,如下:

  Error:()的使用与定义不一致
  RangeError:数值越界
  ReferenceError:非法或不能识别的引用数值
  SyntaxError:发生语法解析错误
  TypeError:操作数类型错误
  URIError:URI处理函数使用不当

五、window.onerror句柄

对以No1中,js错误机制,我们会觉得这种错误提示方式不够友好,而且提示信息很隐蔽,那么我们机会自定义这种错误提示的方式吗?答案是有,就是window.onerror属性。

javascript的window对象有一个特别的属性onerror,如果你将某个function赋值给window的onerror属性,那么但 凡这个window中有javascript错误出现,该function都会被调用,也就是说这个function会成为这个window的错误处理句 柄。

 1 function myerror(_message,_url,_line){
2 alert("错误信息:"+_message
3 +"\n错误的URL:"+_url
4 +"\n错误的行数:"+_line
5 );
6 return true; //屏蔽系统事件
7 }
8 //绑定错误
9 window.onerror = myerror;
10 //触发错误示例
11 window,onload = test;

onerror句柄会3个参数分别是错误信息提示,产生错误的javascript的document ulr,错误出现的行号。

onerroe句柄的返回值也很重要,如果句柄返回true,表示浏览器无需在对该错误做额外的处理,也就是说浏览器不需要再显示错误信息。而如果返回的是false,浏览器还是会提示错误信息。

火狐:

IE:

关于Js异常的更多相关文章

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

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

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

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

  3. Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制

    Atitit. Java script 多重多重catch语句的实现and Javascript js 异常机制 1. 语法错误(ERROR)和运行期错误(Exception) 1 2. 错误类型判断 ...

  4. 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获

    项目开发中的一些注意事项以及技巧总结   1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...

  5. JS异常missing ) after argument list

    JS异常报错 missing ) after argument list 在使用JS拼接DOM元素时,有这种情况发生,'<a onclick="del(' + data.id + ') ...

  6. JS异常简单处理

    有时候JS某一处报错会导致整个页面JS的运行出问题,于是想的简单研究一下JS的错误处理机制.更详细的可以自己参考网站研究:   https://developer.mozilla.org/zh-CN/ ...

  7. 初始化datetimepicker的时候就报了js异常

    全栈眼中的http这一章分别从前端视角和后端视角来分析前后端所关注的侧重点.前端可以通过抓包工具或者chrome devtools 查看每个请求,同域下的资源请求数量等来找出优化点,更关注的是一个页面 ...

  8. JS异常

    当 JavaScript 引擎执行 JavaScript 代码时,会发生各种错误. 可能是语法错误,通常是程序员造成的编码错误或错别字. 可能是拼写错误或语言中缺少的功能(可能由于浏览器差异). 可能 ...

  9. JS异常捕获和抛出

    try...catch 用来异常捕获(主要适用于IE5以上内核的浏览器,也是最常用的异常捕获方式) 使用onerror时间捕获异常,这种捕获方式是比较古老的一中方式,目前一些主流的浏览器暂不支持这种 ...

随机推荐

  1. hibernate之关联关系一对多

    什么是关联(association) 关联指的是类之间的引用关系.如果类A与类B关联,那么被引用的类B将被定义为类A的属性.例如:  public class B{        private St ...

  2. noi.ac #46 最长上升子序列

    \(des\) 长度为 \(n\) 的序列 \(A\),从中删去恰好 \(k\) 个元素(右边的元素往左边移动),记 \(cnt\) 为新 序列中 \(Ai = i\) 的元素个数(即权值与下标相同的 ...

  3. 用SAM实现后缀排序

    因为本人几乎不会后缀数组,所以遇到这种SA的模板题也要拿SAM解决. 还是有一点思维难度的. 首先按照国际惯例,建反串的SAM. 然后对于这个反串,我们考虑两个前缀哪一个字典序小:因为是串是反的,所以 ...

  4. 洛谷 P1006 传纸条 题解

    P1006 传纸条 题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法 ...

  5. C++标准库分析总结(八)——<仿函数、适配器、istream_iterator、ostream_iterator、bind>

    一.仿函数定义 仿函数是STL中最简单的部分,存在的本质就是为STL算法部分服务的,一般不单独使用.仿函数(functors)又称为函数对象(function objects),虽然函数指针虽然也可以 ...

  6. 【CSP模拟赛】避难向导(倍增lca&树的直径)

    耐力OIer,一天7篇博客 题目描述 “特大新闻,特大新闻!全国爆发了一种极其可怕的病毒,已经开始在各个城市 中传播开来!全国陷入了巨大的危机!大量居民陷入恐慌,想要逃到其它城市以 避难!经调查显示, ...

  7. 优化Unity游戏项目的脚本(上)

    本文将由捷克独立游戏工作室Lonely Vertex的开发工程师Ondřej Kofroň,分享C#脚本的一系列优化方法,并提供改进Unity游戏性能的最佳实践. 在开发游戏时,我们遇到了游戏过程中偶 ...

  8. 在dubbo工程中,使用druid监控

    介绍:在dubbo项目中,使用druid的监控功能 问题:因为,在网上找勒,很多的资料,显示的都是需要在web.xml中配置 <servlet> <servlet-name>D ...

  9. PHP如何实现静态的链式调用

    Db::table('**')->where('***','***')->order('***')->find('**'); 想这种应该怎么实现 public function ta ...

  10. flutter手势

    import 'package:flutter/material.dart'; import 'package:flutter_app/pages/dismissed_page.dart'; clas ...