内容要点:

一.throw语句

    所谓异常是当发生了某种异常情况或错误时产生的一个信号。

    抛出异常就是用信号通知发生了错误或异常状况。

    捕获异常时指处理这个信号,即采取必要的手段从异常中恢复。

    在JS中,当产生运行时错误或者程序使用throw语句时就会显示地抛出异常。使用try/catch/finally语句可以捕获异常。

     function fac(x){

        if(x<0) throw new Error("x不能是负数");  //如果输入参数是非法的,则抛出一个异常。JS解释器会立即停止当前正在执行的逻辑,并跳转至就近的异常处理程序。

        for(var f=1; x>1;f*=x,x--)  //否则,计算出一个值,并正常返回它    

        return f;

      };

二.try/catch/finally语句

     try/catch/finally语句是JS的异常处理机制。

    其中try从句定义了需要处理的异常所在的代码块。catch从句跟随在try从句之后,当try块内某处发生了异常时,调用catch内的代码逻辑。catch从句后跟随finally块,后者中放置清理代码,不管try块中是否异常,finally块内的逻辑总会执行。

     try{

         //通常来讲,这里的代码会从头执行到尾而不会产生任何问题

        //但有时会抛出一个异常,要么是由throw语句直接抛出异常

       //要么是通过调用一个方法间接抛出异常

      }

      catch(e){

        //当且仅当try语句块抛出了异常,才会执行这里的代码

        //这里可以通过局部变量e来获得对error对象或者抛出的其他值的引用

        //这里的代码块可以基于某种原因处理这个异常,也可以忽略这个异常

        //还可以通过throw语句重新抛出异常

       }

      finally{

       //不管try语句块是否抛出了异常,这里的逻辑总是会执行,终止try语句块的方法有:

         1.正常终止,执行完语句块的最后一条语句

         2.通过break、continue或return语句终止

         3.抛出一个异常,异常被catch从句捕获

         4.抛出一个异常,异常未被捕获,继续向上传播

           }

     例:

        try{

           //要求用户输入一个数字

              var n = Number(prompt("请输入一个正数",""));

              //假设输入是合法的,计算这个数的阶乘

             var f=fac(n);

              //显示结果

              alert(n+"!="+f);

       }

        catch(ex){

          //如果输入不合法,将执行这里的逻辑

           alert(ex);  //输入-3,出现alert("x不能是负数");

       }

三.debugger语句

      这条语句用来产生一个断点(breakpoint),JS代码的执行会停止在断点的位置,这时可以使用调试器输出变量的值、检测调用栈等。

       function deb(x){
       if(x<0) debugger;
       for(var f=1;x>1;f*=x,x--)
         return f;
     };
      deb(-3);

       需要注意的是:

       debugger不会启动调试器。但如果调试器已经在运行中,这条语句才会真正产生一个断点。例如:firefox的调试扩展插件Firebug,则必须首先为待调试的网页启用Firebug,这样debugger语句才能正常工作。

     

《JS权威指南学习总结--第五章语句》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. 蓝桥杯 C语言 基础训练 数列排序

    问题描述 给定一个长度为n的数列,将这个数列按从小到大的顺序排列.1<=n<=200 输入格式 第一行为一个整数n. 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000. 输 ...

  2. 网络叠加模式VLAN、VxLAN、GRE

    什么是叠加网络 1.一个数据包(或帧)封装在另一个数据包内;被封装的包转发到隧道端点后再被拆装. 2.叠加网络就是使用这种所谓"包内之包"的技术安全地将一个网络隐藏在另一个 网络中 ...

  3. How to use dt.Rows.Cast<System.Data.DataRow>().Take(n)

    参考文章:http://stackoverflow.com/questions/2787458/how-to-select-top-n-rows-from-a-datatable-dataview-i ...

  4. Gpt转mbr

    1)Shift + F10 2)diskpart 3)list disk 4)select dist 0 5)clean 6)convert mbr [注]mbr常用于windows操作系统,而gpt ...

  5. windows 下安装Python

    一.下载 官网地址:https://www.python.org/,64位的版本 二.安装 32位和64位的版本安装起来没有区别,双击打开后,第一步要记得勾上add python to Path 选项 ...

  6. ios 状态码

    9001 无网络 9002 url错误 9003 链接超时 9005 json解析错误 9503 503 error

  7. ConfigurationManager 缓存刷新

    服务没有停止的情况下,如果修改了配置,如果不刷新,是不会生效的,需要在每次重新读取配置前刷新配置文件,具体如下: ConfigurationManager.RefreshSection("a ...

  8. ORALCE 编译过程卡死解决方法。

    --摘自网易博客 术士 在对存储过程进行test的时候,没有完全停止,就又在另外一个窗口,对它进行修改而且进行编译,出现了卡死现象. 用PLSQL Developer 在session里,找到这条se ...

  9. mysql的数据类型与列属性

  10. 关于泛型中<T extends comparable>的理解

    public static <T extends Comparable> T min(List<T> t); 对于上面定义的泛型方法min中,Comparable指的是一个接口 ...