• Live2D 看板娘


      JavaScript编程的一个重要组成部分,是添加错误处理来应对可能会出现的问题。默认情况下,如果因为你的JavaScript中的问题二产生了一个代码异常,那么脚本就会失败并且无法完成加载。这通常不是我们期望的行为。事实上,这往往是灾难性的行为。为了防止这些类型的大问题,你应该把代码包装在一个try/catch块中。

      

      1、try/catch块

      为了防止代码完全崩溃,使用try/catch块来处理代码中的问题。如果在执行JavaScript的try块中的代码时遇到错误,它就会跳出来,并执行catch部分,而不是停止执行整个脚本。如果没有错误,那么整个try块将会被执行,并且不会有catch块将被执行。

      例如,下面的try/catch块试图把一个名为badVarName的未定义的变量的值赋值到变量x:

      try{

        var x = badVarName;

      }catch(err){

        console.log(err.name + ':"' + err.message + '" occurred when assigning x.');

      }

      请注意,catch语句接受一个err参数,这是一个error对象。error对象提供message属性,它提供了错误信息的描述。error对象还提供了一个name属性,它是抛出的错误类型的名称。

      上述代码产生一个异常以及如下的消息:

      ReferenceError:"badVarName is not defined" occurred when assigning x.

      2、抛出你自己的错误

      你也可以使用throw语句抛出自己的错误。下面的代码演示了如何将throw语句添加到一个函数来抛出一个错误(即时不发生脚本错误)。函数sqrRoot()接受一个参数x。然后,它测试x以验证它是一个正数,并返回一个表示x的平方根的字符串。如果x不是一个正数,则相应的错误被抛出,而catch块返回该错误:

      function sqrRoot(x){

        try{

          if(x=="")    throw{message:"can't square root nothing"};

          if(isNaN(x))    throw{message:"can't square root strings"};

          if(x<0)       throw{message:"sorry no imagination"};

          return "sqrt("+x+") = " + Math.sqrt(x);

        }catch(err){

          return err.message;

        }

      }

      function writeIt(){

        console.log(sqrRoot("four"));

        console.log(sqrRoot(""));

        console.log(sqrRoot("4"));

        console.log(sqrRoot("-4"));

      }

      writeIt();

      下面是控制台输出,显示根据向sqrRoot()函数输入的参数内容,抛出的不同错误:

      can't square root nothing

      can't square root strings

      sqrt(4) = 2

      sorry no imagination

      3、使用finally

      异常处理的另一个重要工具是finally关键字。你可以在一个try/catch块的结束处添加这个关键字。执行try/catch块之后,无论是否有错误发生并被捕获或者try块被完全执行,finally块总是被执行。

      下面是在一个网页内使用finally块的例子:

      function testTryCatch(value){

        try{

          if(value<0){

            throw"too small";

          }else if(value>10){

            throw"too big";

          }

          your_code_here

        }catch(err){

          console.log("the number was " + err);

        }finally{

          console.log("this is always written.");

        }

      }

  • 相关阅读:
    【LA3461】Leonardo的笔记本
    【洛谷P3708】Koishi的数学题
    【Uva11762】Race to 1
    【uva11421】玩纸牌
    【反演复习计划】【51nod1594】Gcd and Phi
    【乱入】Uva11021麻球繁衍
    【反演复习计划】【bzoj4407】于神之怒加强版
    BZOJ3293: [Cqoi2011]分金币
    BZOJ2400: Spoj 839 Optimal Marks
    BZOJ1391: [Ceoi2008]order
  • 原文地址:https://www.cnblogs.com/jiangtengteng/p/5231955.html
Copyright © 2020-2023  润新知