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.");

    }

  }

JavaScript基础——添加错误处理的更多相关文章

  1. JavaScript基础——兼容性、错误处理

    JavaScript基础-错误处理Throw.Try.Catch try语句执行可能出错的代码 catch语句处理捕捉到的错误 throw语句创建自定义错误语句 发生的常见的错误类型 可能是语法错误, ...

  2. 前端之JavaScript基础

    前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript历史 1992年Nombas开发出C ...

  3. 一步步学习javascript基础篇(3):Object、Function等引用类型

    我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...

  4. JavaScript 基础回顾——对象

    JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...

  5. javascript基础部分

    javascript基础部分 1  数据类型: 基础数据类型(通过typeof来检测):Number,string,undefined,null,boolean,function typeof只能检测 ...

  6. JavaScript基础知识整理(2)

    15.处理图像 注意:(1)在写js文件时,尽量将函数的声明往后写,将函数调用写在前面,这样能够使代码结构很清晰. (2)一个网页中翻转器一般超过3个,所以使用for循环减少重复使用翻转器代码的次数. ...

  7. (转)JAVA AJAX教程第二章-JAVASCRIPT基础知识

    开篇:JAVASCRIPT是AJAX技术中不可或缺的一部分,所以想学好AJAX以及现在流行的AJAX框架,学好JAVASCRIPT是最重要的.这章我给大家整理了一些JAVASCRIPT的基础知识.常用 ...

  8. 《JavaScript基础教程(第8版)》PDF

    简介:JavaScript基础教程(第8版)循序渐进地讲述了JavaScript及相关的CSS.DOM.Ajax.jQuery等技术.书中从JavaScript语言基础开始,分别讨论了图像.框架.浏览 ...

  9. 第三篇:web之前端之JavaScript基础

    前端之JavaScript基础   前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript ...

随机推荐

  1. iOS企业级开发初级课程-表视图(13集)

    首先了解了表视图的组成.表视图类的构成.表视图的分类以及表视图的两个重要协议(委托协议和数据源协议),对表视图有了一个整体上的认识.接下来我们掌握了如何实现简单表视图和分节表视图,以及表视图中索引.搜 ...

  2. JVM内存监控工具 JavaMelody

    这是一个需要web部署的工具,需要在容器中部署,然后将要监控的程序添加到该程序中即可. JavaMelody是java应用的监控工具,安装部署步骤如下: 1. 首先先下载javamelody.jar ...

  3. TP中的四种url访问方式

    什么是PATHINFO:就是http://localhost/index.php/Home/Index/index/a/1/b/2?c=3中的红色部分, 注意c=3并不是pathinfo的一部分,它是 ...

  4. SVN迁移到Git的过程(+ 一些技巧)

    SVN迁移到Git的过程(+ 一些技巧) 李顺利 Key Words SVN,Git,Clone,Conversion,Tips,VCS,Pro Git 关于在VCS中SVN和Git之间的迁移(Clo ...

  5. jQuery插件-表单验证插件-Validation

    1.Validation简介 标准的验证方法库 1)内置验证规则:必填,数字,E-Mail,URL和信用卡号码等19类内置验证规则. 2)自定义验证规则:自定义 3)验证信息提示:默认了验证信息提示, ...

  6. Arlenmbx!!!!

    我无限制的以安逸为想法 其实生活的不安逸 我所做的事情和思路到底正不正确? 我失败了? 我做不到? 我尝试做到? 我可以做到! 我能做到 我做到了我已经做到了 难道想法和现实是有区别的吗 有理想只是空 ...

  7. mysql “group by ”与"order by"的研究--分类中最新的内容

    这两天让一个数据查询难了.主要是对group by 理解的不够深入.才出现这样的情况这种需求,我想很多人都遇到过.下面是我模拟我的内容表我现在需要取出每个分类中最新的内容 select * from ...

  8. ip netns相关命令

    1.增加虚拟网络命名空间   ip netns add net0   2.显示所有的虚拟网络命名空间 EULER:~ # ip netns list net0 也可通过查看/var/run/netns ...

  9. C# 复制(深拷贝、浅拷贝)

    Object.MemberwiseClone 方法 创建当前 Object 的浅表副本. protected Object MemberwiseClone() MemberwiseClone 方法创建 ...

  10. 转帖:如何建立与使用 Window setup project

    原文地址: http://www.codeproject.com/Articles/12548/Visual-Studio-Windows-Application-Setup-Project