内容要点:

一.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. ASP.NET CORE 1.0 初次接触

    vs2015 update3 升级后,可以创建asp.net core 1.0 的web应用了, 默认模版,发布到指定文件夹 服务器上需要安装 DotNetCore.1.0.0-WindowsHost ...

  2. Redmine管理项目2-邮件通知

    下面是为Redmine配置邮件通知 配置文件 config/configuration.yml 是 Redminde 的配置文件,里面有非常多的选项,邮件通知.附件保存地址. SCM .rmagick ...

  3. C# 线程同步之排它锁/Monitor监视器类

    一.Monitor类说明,提供同步访问对象的机制. 1.位于System.Threading命名空间下,mscorlib.dll程序集中. 2.Monitor通过获取和释放排它锁的方式实现多线程的同步 ...

  4. grunt--自动化打包工具使用

    用grunt搭建自动化的web前端开发环境-完整教程 jQuery在使用grunt,bootstrap在使用grunt,百度UEditor在使用grunt,你没有理由不学.不用! 1. 前言 各位we ...

  5. Redux超酷的开发工具Redux-Devtools

    超酷的开发工具 Redux-devtools redux-devtools是一个有趣而又高效的redux开发工具,如果你想直接在github上查看相关的内容,请前往这里.事实上,也鼓励大家养成在git ...

  6. [大山中学dp常练-4 Rounds]

    Round#1 2016.9.28 这次晚练十分sb 有点浪费时间 全是dp题 先说过程 3分钟草了第一题之后感觉好像有点水 然后翻了翻题目 看了看第一第四题两颗星 其他三颗星 然后一下子第二题题目太 ...

  7. js格式化时间为JSON格式 ajax提交 后台处理

    var effectRow = new Object();if ($('#grd_infos').datagrid('getChanges').length) {    var update = $( ...

  8. 端口(port)的安全模式(security mode)

    1. Cisco29系列交换机可以做基于2层的端口安全 ,即mac地址与端口进行绑定.2. Cisco3550以上交换机均可做基于2层和3层的端口安全, 即mac地址与端口绑定以及mac地址与ip地址 ...

  9. 解决Keras在IDE集成环境中找不到nvcc

    在我们正确配置了Keras使用GPU,并在Terminal中运行一切顺利的的时候,转到Pycharm或者Eclipse中运行有可能会出现"nvcc not found on the $PAT ...

  10. asp.net mvc 上传附件验证

    1.使用验证特性 [RequiredCollection] public ICollection<IFormFile> Attachments { get; set; } 2.自定义验证特 ...