错误类型

编程中我们会遇到四种错误:编译错误、逻辑错误、输入/验证错误、运行时错误,但是在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. 关于mysqli_fetch_assoc的一点说明

    关于mysqli_fetch_assoc的一点说明     如下2种用法是错误的: 错误1 .... $fetchResult = mysqli_fetch_assoc($queryResult); ...

  2. Adding Value To Combo List at Runtime in Oracle Forms

    You want to add a value in Combo List item in Oracle Forms, by typing it in combo list box text area ...

  3. [Java解惑]字符串

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

  4. git :设置 object-c 的忽略文件

    使用 git 命令行来进行版本控制的时候, 需要设置忽略文件. 这里能找到所有语言的忽略文件的内容:https://github.com/github/gitignore OBJECT的忽略文件内容: ...

  5. hdu 1116 Play on Words 欧拉路径+并查集

    Play on Words Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  6. Html、Css-----当有文字和图片的时候,需要文字和图片居中,怎么实现?不想文字换行怎么设置

    1 当有文字和图片的时候,需要文字和图片居中,怎么实现? <a href=#" target="aa" style="white-space:nowrap ...

  7. iOS - OC NSKeyedArchiver 数据归档

    前言 @interface NSKeyedArchiver : NSCoder @interface NSKeyedUnarchiver : NSCoder 在 OC 语言中,归档是一个过程,即用某种 ...

  8. iOS - UIImagePickerController

    前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIImagePickerController : UINavigationController <NSCod ...

  9. mysql概要(七)表字段管理,字段的增删改

    1.添加列 放在某列之后 放第一列: 2.修改(声明和名字),删除列 2.1修改声明 2.2删除列

  10. Oracle数据库高级查询(五)集合查询

    现实需求有时候需要将多个查询组合到一个查询中去 这时就需要使用集合查询操作了 这个操作类似于数学中的交集,并集,和补集的操作   交集就是返回两个查询共有的记录,关键字是INTERSECT 并集是返回 ...