JavaScript基础——添加错误处理
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基础——添加错误处理的更多相关文章
- JavaScript基础——兼容性、错误处理
JavaScript基础-错误处理Throw.Try.Catch try语句执行可能出错的代码 catch语句处理捕捉到的错误 throw语句创建自定义错误语句 发生的常见的错误类型 可能是语法错误, ...
- 前端之JavaScript基础
前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript历史 1992年Nombas开发出C ...
- 一步步学习javascript基础篇(3):Object、Function等引用类型
我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...
- JavaScript 基础回顾——对象
JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...
- javascript基础部分
javascript基础部分 1 数据类型: 基础数据类型(通过typeof来检测):Number,string,undefined,null,boolean,function typeof只能检测 ...
- JavaScript基础知识整理(2)
15.处理图像 注意:(1)在写js文件时,尽量将函数的声明往后写,将函数调用写在前面,这样能够使代码结构很清晰. (2)一个网页中翻转器一般超过3个,所以使用for循环减少重复使用翻转器代码的次数. ...
- (转)JAVA AJAX教程第二章-JAVASCRIPT基础知识
开篇:JAVASCRIPT是AJAX技术中不可或缺的一部分,所以想学好AJAX以及现在流行的AJAX框架,学好JAVASCRIPT是最重要的.这章我给大家整理了一些JAVASCRIPT的基础知识.常用 ...
- 《JavaScript基础教程(第8版)》PDF
简介:JavaScript基础教程(第8版)循序渐进地讲述了JavaScript及相关的CSS.DOM.Ajax.jQuery等技术.书中从JavaScript语言基础开始,分别讨论了图像.框架.浏览 ...
- 第三篇:web之前端之JavaScript基础
前端之JavaScript基础 前端之JavaScript基础 本节内容 JS概述 JS基础语法 JS循环控制 ECMA对象 BOM对象 DOM对象 1. JS概述 1.1. javascript ...
随机推荐
- phpcms中常用代码总结
1.调用数据库模型 $this->db = pc_base::load_model('test_model');//从"phpcms/model/"目录下加载模型类文件 其中 ...
- Java File 常用操作回顾
最近项目中要用到File这个类,温故而知新,回过头来回顾下这个File类,File类主要是对磁盘目录,文件进行操作的Api,具体其实查JDK api 的File全能获取到. 下面写一些文件目录的基本操 ...
- Eclipse的link方式安装JBPM6插件(JBPM学习之一)
1. 首先下载最新的JAVA开发最受欢迎的Eclipse IDE工具,下载地址:http://www.eclipse.org/downloads/ 2. 然后去JBPM社区去下载最新的JBPM6,下载 ...
- smem – Linux 内存监视软件
导读 Linux 系统的内存管理工作中,内存使用情况的监控是十分重要的,在各种 Linux 发行版上你会找到许多这种工具.它们的工作方式多种多样,在这里,我们将会介绍如何安装和使用这样的一个名为 sm ...
- Windows 10磁盘占用100%解决办法
开机后磁盘占用高,是因为 windows 10 默认启用了 superfetch 服务. 这个服务的主要功能是加快程序的启动速度.开机以后,系统将那些经常使用的程序,预先从硬盘加载到内存中,这样, ...
- python gui之tkinter语法杂记
随手写的,后续整理. 1. Entry如何调用父类的__init__? 以下错,原因后续分析 super(Your_Entry_Class, self).__init__(self,**kw) 报错: ...
- phpcms图片模型调用组图的问题
phpcms里面有个图片模型,之前一直没有用过,之前用的轮播图是用文章+缩略图+推荐位实现的 今天看了一下图片模型添加内容的地方,和平常的文章相比多了一个组图的地方:
- php上传文件大小限制修改
打开php.ini 1.最大上传文件大小: upload_max_filesize=2M 改成自己需要的大小 2.最大post大小: post_max_size=2M 改成自己需要的大小,第二个一般比 ...
- phpcms模板标签整理
{template "content","header"} 调用根目录下phpcms\template\content\header文件 {CHARSET} 字 ...
- 除Hadoop大数据技术外,还需了解的九大技术
除Hadoop外的9个大数据技术: 1.Apache Flink 2.Apache Samza 3.Google Cloud Data Flow 4.StreamSets 5.Tensor Flow ...