错误类型

编程中我们会遇到四种错误:编译错误、逻辑错误、输入/验证错误、运行时错误,但是在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++内存分配

    原文:C++内存分配 内存泄露相信对C++程序员来说都不陌生.解决内存泄露的方案多种多样,大部分方案以追踪检测为主,这种方法实现起来容易,使用方便,也比较安全. 首先我们要确定这个模块的主要功能: 能 ...

  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. 利用MDK4中的逻辑分析仪分析IO口的PWM波

    1.先设置软件仿真 ,可参看STM32不完全手册的2.4的软件仿真这一章 (原文件名:1.jpg) Example functionality:                             ...

  4. [SAP ABAP开发技术总结]文本文件、Excel文件上传下传

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

  5. MVC3远程验证

    public class StudentModel { [Display(Name="学生编号")] public int StuId { set; get; } [Require ...

  6. 超实用压力测试工具-ab工具

    在学习ab工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second)概念:服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求 ...

  7. [转载] Linux下高并发socket最大连接数所受的各种限制

    原文: http://mp.weixin.qq.com/s?__biz=MzAwNjMxNjQzNA==&mid=207772333&idx=1&sn=cfc8aadb422f ...

  8. [转载] goroutine背后的系统知识

    原文: http://www.sizeofvoid.net/goroutine-under-the-hood/ 文章写的非常好, 对内部原理解释的非常清楚, 是我喜欢的风格, 感谢作者的精彩文章. = ...

  9. Java编程思想学习笔记_3(继承,内部类)

    一.继承与清理 如果某个类需要去清理自身的资源,那么必须用心为其创建回收垃圾的方法,而如果此类有导出的子类,那么必须在导出类中覆盖回收的方法,当覆盖被继承类的回收垃圾的方法的时候,需要注意销毁的顺序应 ...

  10. iOS项目中的version和build

    Version在plist文件中的key是“CFBundleShortVersionString”,标识应用程序的发布版本号,和AppStore上的版本号保持一致.该版本的版本号是三个分隔的整数组成的 ...