错误类型

编程中我们会遇到四种错误:编译错误、逻辑错误、输入/验证错误、运行时错误,但是在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. sql语句中的注释符号

    sql语句中的注释符号     mysql # 到该行结束.-- 到该行结束 以及 的注释方格:mysql> SELECT 1+1;     # 这个注释直到该行结束mysql> SELE ...

  2. Phonegap项目中禁用WebViewBounce

    UIWebView是iOS SDK中一个最常用的控件,在PhoneGap中,默认也是使用UIWebView作为默认视图显示我们的HTML应用的.   在使用PhoneGap的项目中,默认WebView ...

  3. MyBatis 多表联合查询及优化 以及自定义返回结果集

    下面就来说一下 mybatis 是通过什么来实现多表联合查询的.首先看一下表关系,如图: 这 里,我已经搭好了开发的环境,用到的是 SpringMVC + Spring + MyBatis,当然,为了 ...

  4. [HDOJ1232]畅通工程

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  5. [SAP ABAP开发技术总结]IDoc

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  6. hdu 5167 Fibonacci 打表

    Fibonacci Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Proble ...

  7. iOS - UITextField

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UITextField : UIControl <UITextInput, NSCoding> @ava ...

  8. Java 日期往后推迟n天

    在Java中经常会遇到,以指定的日期为基准,计算向后n天<n可以为正.负数,负数为向前移>. 这时需要在Date类的基础上使用Calendar类,处理方法基本如下: import java ...

  9. 适应各浏览器图片裁剪无刷新上传jQuery插件(转)

    看到一篇兼容性很强的图片无刷新裁剪上传的帖子,感觉很棒.分享下!~ 废话不多说,上效果图. 一.首先建立如下的一个page <!DOCTYPE html> <html xmlns=& ...

  10. mysql Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

    错误原因:/var/lib/mysql目录中socket文件不存在.连接mysql服务器有两种方式:tcp连接,通过socket文件连接.通过socket文件,启动mysql服务,mysql服务会自动 ...