JS:throw try/catch/finally语句

throw语句

异常
就是当发生了某种异常情况或错误时产生了一个信号。抛出异常,用信号通知发生了错误或者异常情况。捕获异常,是指处理这个信号,即采用必要的手段从异常中恢复。
在Javascript中,当运行时错误或者程序使用throw语句就会显式地抛出异常。
语法:throw expression;
expression 的值可以是任意类型的。可以抛出一个代表错误码的数字,或者包含可读的错误消息的字符串。当Javascript解释器抛出异常的时候,通常采用Error类型和其子类型。一个Error对象有一个name属性,表示错误类型,一个message属性,用来存放传递给构造函数的字符串。举例:

function factorial(){
   //如果输入的是非法的,则抛出一个异常
   if(x<0)throw new Error("x 不能为负数");
   //否则,计算出一个值,并且正常的返回它
   for(var f = 1;x>1;f*=x,x--);/*empty*/
   return f;
}

当抛出异常时,JS解析器会立即停止当前正在执行的逻辑,并跳转至就近的异常处理程序。异常处理程序就是用try/catch/finally语句的catch语句编写的。如果抛出异常的代码块没有一条与之关联的catch从句,解释器会检查更高层的闭合代码块,看它是否有相关联的异常处理程序。一次类推,直到找到一个异常处理程序为止。如果抛出的异常函数没有处理的try/catch/finally语句,异常将会向上传播到调用该函数的代码。这样,异常会沿着JS方向的词法结构和调用栈向上传播。如果没有找到任何异常处理程序,JS会把异常当成程序错误来处理,并报告给用户。

try/catch/finally语句

该语句是JS的异常处理机制。其中try语句 定义了需要处理的异常所在的代码块。catch从句跟随在try从句之后,当try语句中的代码块发生异常之后,调用catch从句后跟随的finally块,后者放置清理代码,不管try块中是否产生异常,finally语句中的逻辑总是会执行。尽管finally和catch语句都是可选的,但是try从句至少和二者之一组成完整的语句。try,catch,和finally语句块都需要使用花括弧括起来。
和普通变量不同,catch语句中的标识符具有块级作用域
结合throw语句的实例,说明catch的具体用法:

function factorial(x){
            //如果传进来的参数是非法的则抛出一个异常
            if(x<0)throw new Error("x不能为负数");//这里的error作为catch语句的参数传递进去
            //否则计算出一个值
            for(var f = 1;x>1;f*=x,x--);//这里一定要加上分号,否则,会将return f视为for语句后面的执行内容,函数执行一次之后直接返回
                return f;
        }
        try{
            //要求用户输入一个数字
            var n = Number(prompt("请输入一个正整数",""));
            //假设输入是合法的则计算这个数的阶乘
            var f = factorial(n);//定义的n的值即作为函数factorial函数的参数
            //显示结果
            alert(n+"!="+f);//注意字符串的拼接问题
        }
        catch(ex){
            //如果输入不合法,则会执行这里的代码
            //而执行是否合法,在于factorial函数内部的判断问题
            alert(ex);//告诉用户差生了什么错误
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值