JavaScript异常捕捉

在JavaScript可以使用try...catch来进行异常处理。例如:

try    {
    foo.bar();
}   catch  (e)   {
    alert(e.name  +   " :  "   +  e.message);
} 

目前我们可能得到的系统异常主要包含以下6种:

EvalError: raised when an error occurs executing code in eval() 
RangeError: raised when a numeric variable or parameter is outside of its valid range 
ReferenceError: raised when de-referencing an invalid reference 
SyntaxError: raised when a syntax error occurs while parsing code in eval() 
TypeError: raised when a variable or parameter is not a valid type 
URIError: raised when encodeURI() or decodeURI() are passed invalid parameters
 
上面的六种异常对象都继承自Error对象。他们都支持以下两种构造方法:

new  Error();
 new  Error( " 异常信息 " ); 
手工抛出异常的方法如下:

try    {
     throw   new  Error( " Whoops! " );
}   catch  (e)   {
    alert(e.name  +   " :  "   +  e.message);
}

如要判断异常信息的类型,可在catch中进行判断:

try    {
    foo.bar();
}   catch  (e)   {
     if  (e  instanceof  EvalError)   {
        alert(e.name  +   " :  "   +  e.message);
    }   else   if  (e  instanceof  RangeError)   {
        alert(e.name  +   " :  "   +  e.message);
    }
     //   etc
 }

Error具有下面一些主要属性:

description: 错误描述 (仅IE可用). 
fileName: 出错的文件名 (仅Mozilla可用). 
lineNumber: 出错的行数 (仅Mozilla可用). 
message: 错误信息 (在IE下同description) 
name: 错误类型. 
number: 错误代码 (仅IE可用). 
stack: 像Java中的Stack Trace一样的错误堆栈信息 (仅Mozilla可用). 
因此为了更好的了解错误信息我们可以将catch部分改为如下形式:

try    {
    foo.bar();
}   catch  (e)   {
     if  (browserType  !=  BROWSER_IE)   {
        alert(
             " name:  "   +  e.name  +
             " \nmessage:  "   +  e.message  +
             " \nlineNumber:  "   +  e.lineNumber  +
             " \nfileName:  "   +  e.fileName  +
             " \nstack:  "   +  e.stack);
    }
      else    {
        alert(
             " name:  "   +  e.name  +
             " \nerrorNumber:  "   +  (e.number  &   0xFFFF )  +
             " \nmessage:  "   +  e.message " );
    }
}

JavaScript中的throw命令事实上可以抛出任何对象,并且我们可以在catch接受到此对象。例如:

  try    {
     throw   new  Date();     //  抛出当前时间对象
 }   catch  (e)   {
    alert(e.toLocaleString());     //  使用本地格式显示当前时间
 }
时间: 2024-10-30 01:30:44

JavaScript异常捕捉的相关文章

iOS开发——错误总结&异常捕捉

异常捕捉 1 有时应用崩溃,而日志中的输出信息太少,无法定位问题,这是最头疼的事情,尤其很累的时侯,已经想不起来刚才改过什么了,这就叫做无耐. 2 3 工欲善其事,必先利其器,下面的方法可以给多些信息,让你看到堆栈执行顺序,在哪里崩溃的,也就能大概给个思路,确定问题的症结. 4 5 在 AppDelegate.m 类实现之前加入: 6 7 8 9 void UncaughtExceptionHandler(NSException *exception) { 10 11 // 获取异常相关信息 1

Android全局异常捕捉

// 定义自定义捕捉 package com.xiaosw.test; import java.io.File; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.PrintWriter; import java.io.StringWriter; import java.io.Writer; import java.lang.Thread.UncaughtExceptionHandler;

(插播)unity的 异常捕捉和 ios Android 崩溃信息的捕捉。

最近 做些准备性得工作和有意思的事情.所以最近做了一个适合ios和android 错误信息捕捉的unity插件. 两个功能,app崩溃也就是闪退 是开发者 很头疼的一件事,还有就是一些莫名得错误 有时候也会困扰着我们.现在,unity已经封装得挺好了,及时出现数组越界,和空对象这样严重得错误也不会崩溃,听着挺好,但是这给开发者带了很多烦恼啊.因为有时候可能出错了 你要跟就不知道 ,在什么地方出得错误啊.所以我们要想办法去解决这个问题. 我们都知道及时app崩溃,其实后台还是在运行得 只不过是 到

Oracle- 存储过程和异常捕捉

最近工作有点忙,没什么时间在上班时间进修一下,自己晚上有时候去打打球,回家看看电视剧,日子一天天过…….前段时间看到公司有用到ORACLE,而我一直都觉的ORACLE对于我来说是很重的,所以这个周末花了点时间学习一些基础下. 创建无参存储过程 create procedure p_myPro1 is begin insert into dept(deptno,dname,loc) values(60,'ccx','321321'); end; 修改无参存储过程 create or replace

ArcGIS Javascript 异常之No 'Access-Control-Allow-Origin' header

本文只描述现象与处理措施,不讨论原理. 开发过程中遇到此异常,查询后网上说是跨域访问的问题,给出的解决方案是通过JQuery的跨域访问机制来解决, 难道我需要直接找ArcGISTiledMapServiceLayer相关代码,去重构吗? 还有给出的解决方案如下,http://resources.arcgis.com/en/help/rest/apiref/config.html,大意就是要设置一下ArcGIS Server服务,可服务是别人的,设置不了. 代码如下,在地图类型切换时需要调用另一个

从头认识java-18.2 基本的线程机制(8)多线程的异常捕捉

这一章节我们来讨论一下多线程的异常捕捉. 1.普通情况的异常 package com.ray.ch17; public class Test { public static void main(String[] args) { try { new ThreadA().run(); } catch (Exception e) { System.out.println("捕捉到异常"); } } } class ThreadA implements Runnable { @Override

php错误及异常捕捉

原文:php错误及异常捕捉 在实际开发中,错误及异常捕捉仅仅靠try{}catch()是远远不够的. 所以引用以下几中函数. a)   set_error_handler 一般用于捕捉  E_NOTICE .E_USER_ERROR.E_USER_WARNING.E_USER_NOTICE 不能捕捉: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR and E_COMPILE_WARNING. 一般与trigger_

Java线程学习笔记(二) 线程的异常捕捉

线程异常的捕捉: 正常的情况下,我们在main()方法里是捕捉不到线程的异常的,例如以下代码: public class ExceptionThread implements Runnable{ @Override public void run() { throw new NullPointerException(); } public static void main(String[] args) { ExecutorService executorService = Executors.n

Java多线程——<七>多线程的异常捕捉

一.概述 为什么要单独讲多线程的异常捕捉呢?先看个例子: public class ThreadException implements Runnable{ @Override public void run() { throw new RuntimeException(); } //现象:控制台打印出异常信息,并运行一段时间后才停止 public static void main(String[] args){ //就算把线程的执行语句放到try-catch块中也无济于事 try{ Execu