错误类型

编程中我们会遇到四种错误:编译错误、逻辑错误、输入/验证错误、运行时错误,但是在JavaScript中我们只能最后两种错误。

JavaScript 1.5定义了六种错误类型:

  • EvalError: Raised when the eval() functions is used in an incorrect manner.
  • RangeError: Raised when a numeric variable exceeds its allowed range.
  • ReferenceError: Raised when an invalid reference is used.
  • SyntaxError: Raised when a syntax error occurs while parsing JavaScript code.
  • TypeError: Raised when the type of a variable is not as expected.
  • URIError: Raised when the encodeURI() or decodeURI() functions are used in an incorrect manner.

可以使用Error.name属性获取以上错误类型。如下代码:

function captureErrorType(error) {

    switch (error.name) {

        case 'SyntaxError':

            alert("caught a " + error.name + ": " + error.message);

            //handle error…

            break;

        case 'EvalError':

            alert("caught a " + error.name + ": " + error.message);

            //handle error…

            break;

        case 'ReferenceError':

            alert("caught a " + error.name + ": " + error.message);

            //handle error…

            break;

        default:

            alert("caught a " + error.name + ": " + error.message);

            //handle all other error types here…

            break;

  }

}

错误捕获

使用try/catch

try/catch只能针对特定的某个方法,不能捕获所有的异常。

OnError对象

IE的window对象有个全局事件onerror,它可以捕获脚本中任何未被try/catch处理的最后一个错误。

示例代码:

        //记录所有错误
function reportError(err) {
var errMsg = [];
for (var p in err) {
if (err.hasOwnProperty(p)) {
errMsg.push(p + "=" + err[p]);
}
}
alert(errMsg.join("\n"));
} window.onerror = function (message, url, line) {
// 汇报错误
reportError({
message: message,
url: url,
line: line
});
}
function doSomething() { // error
a();
} try { doSomething();
} catch (e) { throw e; }
doSomething();

错误处理

客户端

在客户端捕获到错误信息可以:

1、  直接显示给用户

2、  作为日志输出

3、  使用ajax发送到服务器端

服务器端

服务器端接收到客户端回传过来的错误信息,可以

1、  作为日志输出

2、  存储到数据库,作为后续运维提供统计数据

3、  使用邮件,qq,微信,短信的形式发送给错误的干系人。

Error对象

在IE中使用try/catch可以获取的一个Error对象,这个对象有如下属性:

  • name        —— 异常对象名/类型
  • message       —— 错误提示信息
  • description     —— 和message属性相同
  • number       —— ErrorCode,错误代码

其中的number属性是一个整数,表示的是错误码,但这并不是真正的错误码,我们需要先将其做一下转换

var errCode = err.number& x0FFFF;

这得到真正的错误码,例如上述的-2146823279 转换之后就得到5009。有了这个错误码之后,我们可以到http://msdn.microsoft.com/en-us/library/1dk3k160(VS.85).aspx微软msdn上查找此错误码对应的。5009对应的错误是Undefined identifier。

错误码

错误有runtime error和syntax error两种。5开头的一般是runtime error,1开头的一般是syntax error。

运行时错误


错误号

描述

1001

内存不足 (IE10)

5029

数组长度必须为有限的正整数

5030

必须为数组长度赋予一个有限的正数

5028

应为数组或参数对象

5010

应为布尔值

5003

无法为函数结果赋值

5000

无法为“this”赋值

5034

不支持值参数中的循环引用

5006

应为日期对象

5015

应为枚举数对象

5022

引发了异常,但未被捕获

5020

在正则表达式中应为“)”

5019

在正则表达式中应为“]”

5023

函数没有有效的原型对象

5002

应为函数

5008

非法赋值

5021

字符集中的无效范围

5035

无效的 replacer 参数

5014

应为 JavaScript 对象

5001

应为数字

5007

应为对象

5012

应为对象成员

5016

应为正则表达式对象

5005

应为字符串

5017

正则表达式中的语法错误

5026

小数位数超出范围

5027

精度超出范围

5025

要解码的 URI 不是有效编码

5024

要编码的 URI 包含无效字符

5009

未定义标识符

5018

意外的数量词

5013

应为 VBArray

 

语法错误

错误号

说明

1019

“break”不能位于循环外

1020

“continue”不能位于循环外

1030

条件编译已关闭

1027

“default”在“switch”语句中只能出现一次

1005

应为“(”

1006

应为“)”

1012

应为“/”

1003

应为“:”

1004

应为“;”

1032

应为“@”

1029

应为“@end”

1007

应为“]”

1008

应为“{”

1009

应为“}”

1011

应为“=”

1033

应为“catch”

1031

应为常量

1023

应为十六进制数字

1010

应为标识符

1028

应为标识符、字符串或数字

1024

应为“while”

1014

无效字符

1026

未找到标签

1025

标签已重定义

1018

“return”语句在函数范围外

1002

语法错误

1035

Throw 的后面必须在同一源行跟有一个表达式

1016

未终止的注释

1015

未终止的字符串常量

IE中JavaScript 的异常处理的更多相关文章

  1. javascript 之异常处理try catch finally--05

    语法结构 try catch finally是ECMAScript-262 第三版提供异常处理机制的标准,语法结构如下: try{ //可能会发生的错误代码 } catch(error){ //错误处 ...

  2. 浏览器中Javascript单线程分析

    线程这个特性对于一门语言环境来说是尤其重要的,在Java/C++环境下都提供了多线程API操作. 但在Javascript中据说代码执行时单线程的,大量计算的逻辑会阻塞浏览器HTML渲染,但setTi ...

  3. JavaScript强化教程——Cocos2d-JS中JavaScript继承

    javaScript语言本身没有提供类,没有其它语言的类继承机制,它的继承是通过对象的原型实现的,但这不能满足Cocos2d-JS引擎的要求.由于Cocos2d-JS引擎是从Cocos2d-x演变而来 ...

  4. 在标记的HREF属性中javascript:alert(this.innerHTML)会怎么样?

    原文:在标记的HREF属性中javascript:alert(this.innerHTML)会怎么样? <a href="javascript:alert(this.innerHTML ...

  5. Eclipse中javascript文件 clg 变为console.log();

    Eclipse中javascript文件 clg 变为console.log(); window>preferance>JavaScript>Editor>Templates ...

  6. ASP.NET Core MVC 中设置全局异常处理方式

    在asp.net core mvc中,如果有未处理的异常发生后,会返回http500错误,对于最终用户来说,显然不是特别友好.那如何对于这些未处理的异常显示统一的错误提示页面呢? 在asp.net c ...

  7. asp.net中javascript与后台c#交互

    asp.net中javascript与后台c#交互 作者:熊猫大叔 字体:[增加 减小] 类型:转载 时间:2015-10-23我要评论,出处:http://www.jb51.net/article/ ...

  8. Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法

    Visual studio 2017中 Javascript对于Xrm对象模型没有智能提示的解决办法 先上个图.语法提示支持到 Microsoft Dynamics xRM API 8.2 也就是cr ...

  9. EBS OAF开发中的错误/异常处理(ErrorHandling) (转)

    原文地址 EBS OAF开发中的错误/异常处理(ErrorHandling) EBS OAF开发中的错误/异常处理(ErrorHandling) (版权声明,本人原创或者翻译的文章如需转载,如转载用于 ...

随机推荐

  1. C++ const 的全面总结[转]

    C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助. Const 是C++中常用的类型修饰符,常类型是指使用类 ...

  2. UE4编程之C++创建一个FPS工程(二)角色网格、动画、HUD、子弹类

    转自:http://blog.csdn.net/u011707076/article/details/44243103 紧接上回,本篇文章将和大家一同整理总结UE4关于角色网格.动画.子弹类和HUD的 ...

  3. jquery之wrap(),wrap(),unwrap()方法详解

    [注]wrap():为每个匹配元素外面添加指定的HTML结构, wrapAll(): 为所有匹配元素(作为一个整体)外面添加一个指定的HTML结构 原文地址:http://www.365mini.co ...

  4. Debian8 远程登录Permission Denied,please try again

    多数是系统没有开启Root登录的权限. 修改root的ssh权限: ① vi /etc/ssh/sshd_config ② 找到配置项PermitRootLogin 将此项的值改为yes ③ 重启ss ...

  5. [c/c++]linux下使用c/c++操作mysql

    首先需要安装相应的库文件,直接apt-get就可以. sudo apt-get install libmysqlclient-dev 编译的时候,需要额外链接到这个库.如果是apt-get安装的话,那 ...

  6. Linux c 下使用getopt()函数

    命令行参数解析函数 —— getopt() getopt()函数声明如下: #include <unistd.h> int getopt(int argc, char * const ar ...

  7. git学习笔记06-创建分支合并分支-比svn快多了,因为只有指针在改变

    一开始git只有一条时间线,这个分支叫主分支,即master分支. HEAD严格来说不是指向提交,而是指向master,master才是指向提交的,所以,HEAD指向的就是当前分支. 每次提交,mas ...

  8. [转载] nosql 数据库的分布式算法

    原文: http://juliashine.com/distributed-algorithms-in-nosql-databases/ NoSQL数据库的分布式算法 On 2012年11月9日 in ...

  9. html,CSS文字大小单位px、em、pt的关系换算

    html,CSS文字大小单位px.em.pt的关系换算 这里引用的是Jorux的“95%的中国网站需要重写CSS”的文章,题目有点吓人,但是确实是现在国内网页制作方面的一些缺陷.我一直也搞不清楚px与 ...

  10. apiCloud中图片裁剪模块FNImageClip的使用

    思路 1.获取需裁剪图片的地址 2.跳转到裁剪页面 3.裁剪成功返回新图片地址 4.替换原有图片地址 增加修饰和事件 str += '<li class="tu image" ...