`
q272156430
  • 浏览: 276581 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

try catch finally

阅读更多

try catch finally是javascript语言提供的异常处理机制。语法结构如下

 

 

try {
  //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
}
catch (e) {
  // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
  //e是一个局部变量,用来指向Error对象或者其他抛出的对象
}
finally {
  //无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
 }

 

try…catch…finally…语法中除了try以外catch和finally都是可选的(两者必须要有一个),也就是说try…catch…finally…语法有以下三种形式

try{

//some code

}

catch(e){

//somecode

}

finally{

//some code

}

try{

//some code

}

catch(e){

//somecode

}

try{

//some code

}

finally{

//some code

}

如果有一定catch,一旦try中代码抛出异常以后就是先执行catch中的代码,然后执行finally中的代码。如果没有catch语句,try中的代码抛出异常后,就会先执行finally中的语句,然后将try中抛出的异常以异常的方式继续往上抛。

不管try代码块的执行时如何被终止的(出现异常、return、自然终止)finally中的语句始终会被执行,正是由于finally的这种特性,通常finally用来执行一些清理工作。如果try中代码是以return,continue,break的方式终止的,Javascript引擎会在执行完finally中的语句以后再执行相应的try中的返回语句。

throw语句说明

    throw语句在javascript1.4中已经实现。try的语法很简单,如下
throw expression;

其中的expression可以是任何一种类型,也就是说throw “There is a error” 或是throw 1001都是正确的。但通常我们会抛出一个Error对象或是Error对象的子类。关于Error我们稍后介绍,先看一段throw的样例代码。

 

 

function factorial(x) {
    // If the input argument is invalid, throw an exception!
    if (x < 0) throw new Error("x must not be negative");
    // Otherwise, compute a value and return normally
    for(var f = 1; x > 1; f *= x, x--) /* empty */ ;
    return f;
}

 

Error对象

Error对象和它的子类是在javascript1.5中实现的。Error的构造函数有两种

new Error( )
new Error(message )

Error有两个基本的属性name和message。message用来表示异常的详细信息。而name指的的是Error对象的构造函数。此外,不同的js引擎对Error还各自提供了一些扩展,例如mozilla提供了fileName(异常出现的文件名称)和linenumber(异常出现的行号)的扩展,而IE提供了number(错误号)的支持。不过name和message是两个基本的属性,在firefox和ie中都能够支持。Javascript中Error还有几个子类EvalError, RangeError, ReferenceError, SyntaxError, TypeError, URIError,各自的意思就不在这里详细描述了,读者可以在我提供的参考文档中找到相应的参考。

Javascript的异常处理机制和window.onerror句柄

当javascript代码中出现错误的时候,js引擎就会根据js的调用栈逐级寻找对应的catch,如果没有找到相应的catch handler或catch handler本身又有error或者又抛出新的error,最后就会把这个error的处理交给浏览器,浏览器会用各自不同的方式(IE以黄色三角图案显示在左下角,而firefix会显示在错误控制台中)显示错误信息给访问者。很多场景下,我们会觉得这种错误提示方式不够友好,而且提示信息很隐蔽,那么我们机会自定义这种错误提示的方式吗?答案是有,就是window.onerror属性。

javascript的window对象有一个特别的属性onerror,如果你将某个function赋值给window的onerror属性,那么但凡这个window中有javascript错误出现,该function都会被调用,也就是说这个function会成为这个window的错误处理句柄。

 

 

// Display error messages in a dialog box, but never more than 3
window.onerror = function(msg, url, line) {
    if (onerror.num++ < onerror.max) {
        alert("ERROR: " + msg + "\n" + url + ":" + line);
        return true;
    }
}
onerror.max = 3;
onerror.num = 0;

 

onerror句柄会3个参数分别是错误信息提示,产生错误的javascript的document ulr,错误出现的行号。

onerroe句柄的返回值也很重要,如果句柄返回true,表示浏览器无需在对该错误做额外的处理,也就是说浏览器不需要再显示错误信息。而如果返回的是false,浏览器还是会提示错误信息。

 

 

window.onerror=function(){

alert(”xx”);

return true; //如果注释掉该语句,浏览器中还是会有错误提示,反之则没有。

}

function throwerror(){

throw new Error(”cc”);

}

 

我们在开发HTML的过程中避免不了一些Js的异常,通常我们也不可能依赖客户打开浏览器的错误提示框(如上图)来为我们定位bug提供线索,而利用window.onerror句柄我们就可以讲错误提示信息显示出来,客户只要在错误出现的时候,提供相应的截屏就可以了,这点可以很好的帮助开发人员定位,分析javascript相关的错误。

分享到:
评论

相关推荐

    try 与 catch finally关键字

    Java的 try 与 catch finally关键字的使用

    Java try catch finally异常处理组合详解

    Java try catch finally异常处理组合详解 Java try catch finally异常处理组합是Java语言中的异常处理机制,用于捕获和处理程序中的异常。下面对try catch finally异常处理组合进行详细的介绍。 try catch组合: ...

    使用try-catch-finally处理异常

    你还可以在`try-catch-finally`结构内部嵌套另一个`try-catch-finally`结构,以处理更复杂的情况。这种方式使得异常处理更加灵活,能够针对不同层次的异常进行分别处理。 6. **throw和throws关键字** `throw`...

    try_catch_finally异常处理java

    本文将深入探讨Java中的`try-catch-finally`语句块,以及它们在异常处理中的作用。 首先,`try`块是异常处理的起点。在这个代码段中,我们通常会放置可能会抛出异常的代码。当Java执行到可能抛出异常的代码行时,...

    VB.NET Try Catch Finally用法演示源码.rar

    VB.NET 演示带Finally的Try Catch 异常处理用法演示,这个源码就是捕捉VB.NET运行错误的,结合了最常规的try catch组合,并且使用了Finally处理的情况,那么为什么要使用Finally呢?使用Finally的好处是,把资源释放...

    C#中的try catch finally用法分析

    `try-catch-finally`语句块是C#中用于捕获和处理异常的关键结构。下面我们将详细解析这个语句块的用法,并通过实例来展示其功能。 1. `try`块: `try`块包含可能抛出异常的代码。当在`try`块内的代码执行过程中...

    Jungle68#-#[Java] try catch finally,try里有return,finally还执行么?1

    Condition 3: try中有异常,try-catch-finally里都没有return ,finally 之后有个returntry中有异常以后,根据

    C++异常处理技巧try/catch/throw/finally/exception

    通过合理地使用`try`、`catch`、`throw`和`exception`等关键字,开发者不仅能够编写更加可靠的代码,还能显著提升程序的可维护性和可读性。 #### 二、C++标准异常处理 ##### 1. 构造和析构中的异常抛出 在C++中,...

    17.javatry…catch…finally语句.zip

    17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句.zip17.javatry…catch…finally语句...

    try-catch-finally捕获异常

    try-catch-finally捕获异常 try-catch-finally语句是Java语言中一种常用的异常处理机制,当程序在执行过程中出现异常时,可以使用try-catch-finally语句来捕获和处理异常。下面将详细介绍try-catch-finally语句的...

    try catch finally的执行顺序深入分析

    在Java、C#、JavaScript等语言中,`try-catch-finally`结构是异常处理的基础。这个结构的执行顺序是固定的,下面我们将深入分析其工作原理。 首先,程序会尝试执行`try`块中的代码。`try`块的作用是包含可能抛出...

    再谈异常处理try catch finally

    本文将深入探讨`try-catch-finally`语句块的使用,并通过实例分析如何优化异常处理,遵循最佳实践。 首先,让我们回顾一下`try-catch-finally`的基本用法。在C#中,`try`块用于包含可能会抛出异常的代码,`catch`块...

    java try…catch嵌套捕获异常的实例

    在这个结构中,`try`块包含可能会抛出异常的代码,每个`catch`块分别捕获不同类型的异常,`finally`块则包含需要无论发生何种情况都必须执行的代码,如资源清理。 接下来,我们来探讨嵌套的`try-catch`块。当一个`...

    try、catch、finally、return 执行顺序.doc

    try、catch、finally、return 执行顺序详细讲解 try、catch、finally、return 执行顺序是 Java 编程语言中的一种 exception 处理机制,用于处理程序中的异常情况。下面我们来详细讲解 try、catch、finally、return ...

    trycatch.zip

    本示例中的"trycatch.zip"文件内容就是展示了如何在Golang中模拟`try...catch`和`try...catch...finally`。 Golang的核心错误处理方式是通过返回错误值。通常,函数会返回一个错误值,如果在执行过程中遇到问题,就...

    简单谈谈java的异常处理(Try Catch Finally)

    本文将深入探讨Java异常处理的关键元素——try、catch和finally,以及如何自定义异常类。 首先,Java中的异常处理基于五个关键字:`try`、`catch`、`finally`、`throw`和`throws`。`try`块用于包含可能会抛出异常的...

    java中try catch的用法

    // finally块总是会被执行,无论try-catch块中是否发生异常 // 通常用来释放资源等操作 } ``` #### 三、示例分析 根据题目提供的代码示例,我们来进行更深入的解析: ```java import java.io.*; public class ...

Global site tag (gtag.js) - Google Analytics