`

JS的try catch finally

阅读更多
这两天接手同事的业务,发现公共代码被人修改,比如
function initCmp()
{
    try{
        if(abc!= null && abc!= "")
        {
	   ...
        }
	
        if("" != net.place2)
        {
	    ...
        }
    }
    catch(e)
    {    }
}

abc  net 这两个参数都是以全局变量的形式传参,可是有很多业务之前是没有定义这些参数的,这样就会报错。

即便是用 Ext.value 、  Ext.isEmpty 、  参数 == undefined,都没有用。因为IE的Scope要比FF小,如果js执行的时候发现了一个未知的变量,返回的类型是Error,而在FF下面是Undefined

最后没办法采用了JS里面的try{}catch(){}来解决,好让代码能继续往下执行并且测试能够通过

在这里贴一下详细的try catch 文档

--------------------------------------------
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相关的错误
分享到:
评论

相关推荐

    trycatch.zip

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

    理解javascript中try...catch...finally

    主要帮助大家理解javascript中try...catch...finally,从浅入深,一步步掌握javascript中try...catch...finally的使用方法,感兴趣的小伙伴们可以参考一下

    try-catch-finally-return-in-finally.rar_return

    通过分析 `12.5-1.js` 和 `try-catch-finally-return-in-finally.js` 文件,可以深入理解这种机制在实际代码中的应用。这些文件可能包含了具体的示例,演示了如何在不同情况下使用 `try-catch-finally` 结构以及 `...

    try-catch的用法和含义

    `try-catch` 结构作为异常处理的核心机制,在各种编程语言中广泛采用,如 Java、C# 和 JavaScript 等。本文将深入探讨 `try-catch` 的基本概念、语法结构及其应用场景。 #### 一、`try-catch` 的基本概念 `try-...

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

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

    js代码-封装try-catch函数,实现套用

    在JavaScript编程中,`try-catch`语句是用于异常处理的关键结构,它允许程序员捕获并处理可能出现的错误。这个标题"js代码-封装try-catch函数,实现套用"意味着我们要探讨如何将`try-catch`逻辑封装到一个自定义函数...

    javascript中 try catch用法

    JavaScript中的try catch语句是ECMAScript规范提供的异常处理机制,它允许程序捕捉执行过程中发生的错误,并执行错误处理代码,避免整个程序因为一个错误而崩溃。在JavaScript开发中,try catch语句的使用非常频繁,...

    try-catch-finally.js:一个很小的库,用于在JavaScript中更灵活地捕获错误

    try-catch-finally.js 843字节库,可在JavaScript中更灵活地捕获错误。内容注意事项按名称捕获可能不起作用按类型捕获在跨框架/过程中不起作用错误被消耗测验 安装 浏览器&lt; script src =" try-catch-finally.js ...

    javascript中的try catch异常捕获机制用法分析

    JavaScript的异常处理机制采用了try...catch语句,它由try、catch和可选的finally三部分组成。当在try代码块中发生错误时,控制流会立即跳转到相应的catch块,以便处理异常。finally块则用于执行不论是否出现异常都...

    try-finally-throw-in-finally.rar_Called

    在提供的文件`15.9.2.2-1.js`和`try-finally-throw-in-finally.js`中,可能包含了对这个特定主题的示例代码或测试用例。这些文件可以帮助我们更好地理解`Date`构造函数的非构造函数调用以及`try...finally`和`throw`...

    javascript 中的try catch应用总结

    JavaScript中的`try...catch`语句是用于处理程序运行时可能出现的错误的一种机制。它允许开发者在代码中捕获并处理异常,防止程序因未预期的错误而崩溃。以下是关于`try...catch`的一些关键知识点: 1. **基本结构*...

    实例解析js中try、catch、finally的执行规则

    本文主要通过实例解析来更好的了解js中try、catch、finally的执行规则,具有很好的参考价值,下面跟着小编一起来看下吧

    no-try:通过删除try-catch-finally块来清理代码! :rocket:

    :rocket: 不试 :rocket: 删除那些难看的try-catch-finally块,清理代码库! :smiling_face_with_heart-eyes: 关于在可能期望方法throw的代码库中工作可能会导致逻辑包裹在try-catch块中的情况。 它还导致其他代码...

    理解javascript中try…catch…finally

    本文为大家分析了javascript中try…catch…finally的使用方法,分享给大家供大家参考,具体内容如下 稍微复杂一点点,就要用到判断语句,if else进行条件判断,话说if条件else否则,这样的判断对于写程序代码的码侬...

    JavaScript语句错误throw、try及catch实例解析

    finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行。 JavaScript 抛出(throw)错误 当错误发生时,当事情出问题时,JavaScript 引擎通常会停止,并生成一个错误消息。 描述这种情况的技术...

    js实践篇:例外处理Try{}catch(e){} 1

    本文将深入探讨JavaScript中的异常处理机制,包括Error对象、自定义异常以及try...catch...finally语句的用法。 一、异常处理概念 在JavaScript运行时,如果发生如数组索引越界、类型不匹配或语法错误等错误,解释...

    js try chtch实例

    在JavaScript编程语言中,`try...catch`语句是一个至关重要的错误处理机制,它允许开发者在可能出现错误的代码块中进行异常处理。本实例将详细解释`try...catch`的工作原理,以及如何在实践中有效利用它来提升程序的...

    js中的异常处理try...catch使用介绍.docx

    理解并熟练使用`try...catch`结构对于编写健壮的JavaScript代码至关重要,因为它允许你在遇到问题时优雅地处理错误,而不是让程序无谓地崩溃。此外,结合`finally`块,你还可以在无论是否发生错误的情况下执行清理或...

    JS异常处理try..catch语句的作用和实例

    在理解try..catch的同时,我们还需要知道,JavaScript还提供了其他一些错误处理的机制,比如finally语句,无论是否发生错误,finally语句中的代码总会被执行,这通常用来进行一些清理工作,例如关闭文件句柄、取消...

Global site tag (gtag.js) - Google Analytics