《HTML教程》-4.7教学材料_第1页
《HTML教程》-4.7教学材料_第2页
《HTML教程》-4.7教学材料_第3页
《HTML教程》-4.7教学材料_第4页
《HTML教程》-4.7教学材料_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

4.7.1异常处理

在程序运行中错误是不可避免的,那么如果程序中出现了错误该怎么办呢?不用担心,JavaScript给我们提供了处理错误的方式,那就是try…catch语句。它可以使程序即使发生了异常也可以优雅的结束。try…catch语法结构如下:try{//有可能触发异常的语句;}catch(err){

//处理错误的语句}finally{//处理语句}

图4-5try…catch执行流程执行流程:首先,执行try中的语句,如果发生错误,则执行catch中的语句处理错误,处理完成后再执行finally中的语句;如果没有发生错误,则执行finally中的语句。可见无论是否发生错误,都会执行finally中的语句,所以可以在finally中编写清理工作的代码,比如释放申请的资源等。执行流程如图4-5所示。除了JavaScript抛出的异常外,我们也可以根据情况自己抛出异常。JavaScript提供了关键字throw,用于抛出异常。用法如下:throw异常对象;这里的异常对象可以是String、数字、布尔值或对象。不论是JavaScript抛出的异常,还是自己抛出的异常,都会引发错误处理。但如果没有提供处理错误的try…catch语句,则会导致程序结束。异常处理的实例见清单4-6。4.7.2with语句

说到with语句就不得不提到作用域链(scopechain)的概念,所谓作用域链就是指一系列对象,用于在其中查找要使用的变量或属性。如果要使用变量x,则会在当前对象中查找,若找到则使用这个x;若找不到,则到上一层对象中进行查找,若还是查不到,则再到上一层对象中进行查找,直到顶层对象——即全局对象——如果还查不到,则说明变量x没有声明,触发ReferenceError异常。with语句的作用就是暂时扩充这作用域链,用指定的对象充当上层的作用域对象,换句话说,就是如果找不到要使用的变量,则会到with指定的对象中查找该变量。有点类似于Java的import语句,如果没有学习过Java就不要管这个import了,如果学习过,则可以加深对with语句的理解。with语句的语法格式如下:with(对象名){

语句;}with语句主要用在访问层次较深的变量的访问上,用于省略冗长的“对象名点”的书写。见清单4-6。使用with必须注意以下几点:◆在JavaScript严格模式(见4.8.3usestrict语句)下,不能使用with语句;

◆使用with语句的代码,JavaScript无法对其进行优化,运行效率低。基于以上两点原因,尽量避免使用with语句,虽然(有时)它可以大幅减少代码量!4.7.3usestrict语句

从ECMAScript5开始引入了usestrict,严格说来它并不是一条语句,而是一条指令。用于说明后面的代码运行于严格模式。语法如下:“usestrict”;需要注意的是,这里没有关键字,只是一个普通的字符串表达式,单引号和双引号都可以。对于以前版本的JavaScript,不支持严格模式也没有问题,只是把它作为普通表达式求值,求值后也没有使用,不会影响其他程序。可以使用以下方法测试JavaScript是否支持严格模式:varisStrict=(function(){“usestrict”;returnthis===undefined;}());这里用到了内联函数,即声明加调用同时进行,有关函数的内容将在第5章介绍。这里用到了严格模式的一条性质:在严格模式下,任何函数调用时,调用时都会有一个值为undefined的this。在非严格格式下,this的值为全局对象。严格模式与非严格模式有以下区别:

◆严格模式下禁止使用with语句。

◆严格模式下任意变量必须先声明后使用;非严格模式下未声明的变量当作全局变量。

◆严格模式下函数调用时this的值为undefined,而非严格模式下值为全局对象。

◆严格模式下对不可写的属性赋值,或不可扩展(继承)的对象添加新的属性,将抛出TypeError异常,而非严格模式则采取静默处理(即没有任何提示)。

◆严格模式下,传递给eval()的代码不能声明变量和函数。

◆严格模式下,对象中不能声明两个同名的属性。

◆严格模式下,arguments对象持有实际参数的静态拷贝。而非严格模式下,数组和函数参数则指向同一个值。

◆严格模式下,delete后的变量名(对象名)不合法时,会抛出SyntaxError异常。非严格模式下,则静默处理(什么也不做)。

◆严格模式下,企图删除不可配置的属性时会触发TypeError异常。

◆严格模式下,不允许出现八进制的字面量整数表示。

◆严格模式下,eval和arguments作为关键字使用。

◆严格模式下不能查看调用堆栈。try异常处理、with语句和usestrict的用法示例如清单4-6。with用法中reg函数用到的form如下:<formname="register">

姓名:<inputtype="text"name="name"/><br/>

性别:<inputtype="radio"name="gender"value="男"/>男<inputtype="radio"name="gender"value="女"/>女<br/>

年龄:<inputtype="number"name="age"/><br/> <inputtype="button"value="注册"onclick="reg()"/></form>异常处理中out(“a=”+a);是一个错误,原因是引用了没有定义的变量a。注意,“未加声明的变量视为全局变量”,这句话是对变量声明来说,而不是针对变量引用。如果将out(“a=”+a);换成a=10;,就不是语法错误,而是声明了一个全局变量a。这在严格模式下是行不通的,因为所有变量必须先声明后使用。with用法说明中,声明了函数reg()(函数后面介绍),由于用with声明了document.register,其中register是form的名字,那么访问姓名文本框的值就可以直接写name.value了,即with(document.register){ out(name.value);out(gender.value); out(age.value); }相当于out(.value);out(document.register.gender.value);out(document.register.age.value);可以看出,使用with有时可以节约大量代码,但要注意避免使用with

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论