内容要点:

一.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. springboot学习笔记-1 第一个springboot示例

    springboot是一个微框架,其设计的目的是为了简化spring框架的搭建和配置过程.从而使开发人员不再需要定义样板化的配置.下面是springboot的入门案例:它演示了利用springboot ...

  2. IOS GCD图片数据异步下载,下载完成后合成显示

    关于GCD使用详解,请看我的上一篇blog:http://www.cnblogs.com/xin-lang/p/6278606.html 前段时间遇到个需要异步下载,下载完成后再组合显示的东西.这里我 ...

  3. MySql开启远程访问(Linux)

    Linux服务器上安装了MySql数据库服务器之后,在远程访问出现了61错误.经检查后,发现需要在MySql配置文件中取消绑定IP.具体做法如下: 打开my.cnf配置文件.连接到服务器之后,在终端中 ...

  4. Linked List - leetcode

    138. Copy List with Random Pointer //不从head走 前面加一个dummy node 从dummy走先连head 只需记录当前节点 //这样就不需要考虑是先new ...

  5. 约瑟夫问题-Josephus--及实例说明

    //---我保证所有的代码都已经通过测试---// 类似约瑟夫的问题又称为约瑟夫环.又称“丢手绢问题”. 这个问题来自于这样的一个关于著名犹太历史学家 Josephus传说: 在罗马人占领乔塔帕特后, ...

  6. svn恢复到某一版本

    转 经常由于坑爹的需求,功能要切回到之前的某一个版本.有两种方法可以实现: 方法1: 用svn merge 1) 先 svn up,保证更新到最新的版本,如20: 2) 然后用 svn log ,查看 ...

  7. centos7配置开启无线网卡,重启防火墙

    centos7配置无线网卡: 在虚拟机为nat的网络连接下(就是默认的那个),centos7默认网卡未激活. 可以设置 文件 /etc/sysconfig/network-scripts/ifcfg- ...

  8. openstack私有云布署实践【17 配置文件部份说明】

    Nova部份 cpu_allocation_ratio = 4.0 物理 CPU 超售比例,默认是 16 倍,超线程也算作一个物理 CPU,需要根据具体负载和物理 CPU 能力进行综合判断后确定具体的 ...

  9. 浙大 pat 1038 题解

    1038. Recover the Smallest Number (30) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHE ...

  10. <验证码的产生>C语言---验证码的产生和验证

    无论在网页还是软件上登录时候都会遇到验证码的问题,不知道不懂其中奥秘的码友有没有兴趣一起来探讨一下. 其实并没有什么奥秘可言,就是产生随机数,然后让产生的随机数做为字符库(提前做好的数字字母字符串)的 ...