错误类型

编程中我们会遇到四种错误:编译错误、逻辑错误、输入/验证错误、运行时错误,但是在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. CentOS系统下各文件夹的作用

    linux下的文件结构,看看每个文件夹都是干吗用的 /bin 二进制可执行命令 /dev 设备特殊文件 /etc 系统管理和配置文件 /etc/rc.d 启动的配置文件和脚本 /home 用户主目录的 ...

  2. WebSphere MQ 入门指南

    WebSphere MQ 入门指南这是一篇入门指南.我们从最基本的概念说起: 基础概念 对于MQ,我们需要知道4个名词:队列管理器.队列.消息.通道:对于编程设计人员,通常更关心消息和队列,对于维护管 ...

  3. hdu 5693 朋友 博弈

    朋友 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Problem Descr ...

  4. JS学习笔记(三) 对象

    参考资料: 1. http://www.w3school.com.cn/js/js_objects.asp ☂ 知识点: ☞ Javascript中的所有事物都是对象. ☞ Javascript是基于 ...

  5. Spring环境的搭建与测试 (spring2.5.6)

    这里是采用的视频里面的spring版本 下载spring2.5.6, 然后进行解压缩,在解压目录中找到下面jar文件,拷贝到类路径下 dist\spring.jar lib\jakarta-commo ...

  6. 大学生学习编程(PHP)

    在v2ex上看到一大三的求职实习,然后有人给出了建议,个人觉得也挺好,做个记录./  原帖地址 @ARjson问: 大三的学生党,求实习岗位,现居北京.后端PHP一年半开发经验,熟悉speedphp, ...

  7. Android ActionBar以及menu的代码设置样式

    menu部分xml代码 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android= ...

  8. Redis脚本插件之————执行Lua脚本示例

    Redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行.使用脚本的好处如下: 1.减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在red ...

  9. vim的配置文件及常用的快捷键

    一些最简单的配置,即在.vimrc中可以写入的配置: 首先,说明一点,在.vimrc文件中,可以用“  把一行的配置注销掉. set nocompatible  “关闭 vi 兼容模式:其中 comp ...

  10. The new day of my blog

    今天开始了我的博客建造之旅,作为一个ACMer(虽说是弱校的),我也想象其他人一样把自己的题解和心得记录下来,一来可以和大家分享一下,二来也可以留给将来的自己作回顾,希望众大神能够给以指导指导,让我这 ...