zoukankan      html  css  js  c++  java
  • try catch finally的理解

    定义以及用法:

    try/catch/finally 语句用于处理代码中可能出现的错误信息。

    错误可能是语法错误,通常是程序员造成的编码错误或错别字。也可能是拼写错误或语言中缺少的功能(可能由于浏览器差异)。

    try语句允许我们定义在执行时进行错误测试的代码块。

    catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。

    finally 语句在 try 和 catch 之后无论有无异常都会执行。

    注意: catch 和 finally 语句都是可选的,但你在使用 try 语句时必须至少使用一个。

    提示: 当错误发生时, JavaScript 会停止执行,并生成一个错误信息。使用 throw 语句 来创建自定义消息(抛出异常)。如果你将 throwtrycatch一起使用,就可以控制程序输出的错误信息。

    总结:

    try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。否则不会执行catch里面的内容 } 

    catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 } 

    finally { //不管什么情况都会执行,包括try catch 里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally } 

    案例:

    	(function (){
    		try{
    			throw new Error();
    		}catch(x){
    			var x = 1, y = 2;
    			console.log(x); // 1
    		}
    		console.log(x); //undefined
    		console.log(y); //2
    	}());
    

    下面说一下js错误Error对象的详解:

     一·概念

    error,指程序中的非正常运行状态,在其他编程语言中称为“异常”或“错误”。解释器会为每个错误情形创建并抛出一个Error对象,其中包含错误的描述信息。

    ECMAScript定义了六种类型的错误。除此之外,还可以使用Error构造方法创建自定义的Error对象,并使用throw语句抛出该对象。

    六种错误:

    • ReferenceError:找不到对象时
    • TypeError:错误的使用了类型或对象的方法时
    • RangeError:使用内置对象的方法时,参数超范围
    • SyntaxError:语法写错了
    • EvalError:错误的使用了Eval   
    • URIError:URI错误

    二·错误处理

    即使程序发生错误,也保证不异常中断的机制。

    try{
        可能发生错误的代码
    }catch(err){
        只有发生错误时才执行的代码
    }finally{
        无论是否出错,肯定都要执行的代码
    }

    使用要点:

    • 使用try包裹的代码,即使不出错,效率也比不用try包裹的代码低;
    • 在try中,尽量少的包含可能出错的代码;
    • 无法提前预知错误类型的错误,必须用try catch捕获;
    • finally可以省略;

    三·抛出自定义错误

    何时:如果函数的定义者,需要告知调用者使用过程中的错误;

    如何:throw new Error("提示文字");

    // 甲:定义函数的人
    function round(num, d){
        if(!isNaN(num) && !isNaN(d)){
            num *= Math.pow(10, d);
            return num;
        }else{
            // 抛出自定义错误
            throw new Error("参数必须是数字");  
        }
    }
    
    // 乙:调用函数的人
    var d = parseInt(prompt('请输入数字'));
    try{
        alert(round(123.456, d));
    }catch(err){
        alert(err.message);  // 接住抛出的自定义错误
    }
  • 相关阅读:
    LeetCode 623. Add One Row to Tree
    LeetCode 894. All Possible Full Binary Trees
    LeetCode 988. Smallest String Starting From Leaf
    LeetCode 979. Distribute Coins in Binary Tree
    LeetCode 814. Binary Tree Pruning
    LeetCode 951. Flip Equivalent Binary Trees
    LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List
    LeetCode 889. Construct Binary Tree from Preorder and Postorder Traversal
    LeetCode 687. Longest Univalue Path
    LeetCode 428. Serialize and Deserialize N-ary Tree
  • 原文地址:https://www.cnblogs.com/8023-CHD/p/10930813.html
Copyright © 2011-2022 走看看