ajax实用技术教学课件作者程继洪肖川李海斌编著第4章javascript基础4.7.pptx
文本预览下载声明
4.7 其他语句
除了上述的控制结构外,还有一些其他结构在实际编程中应用的比较多,现分述如下。
4.7.1 异常处理
在程序运行中错误是不可避免的,那么如果程序中出现了错误该怎么办呢?
不用担心,JavaScript给我们提供了处理错误的方式,那就是try…catch语句。
它可以使程序即使发生了异常也可以优雅的结束。
try…catch语法结构如下:
try {
// 有可能触发异常的语句;
}
catch(err) {
// 处理错误的语句
}
finally {
// 处理语句
}
图4-5 try…catch执行流程
执行流程:
首先,执行try中的语句,如果发生错误,则执行catch中的语句处理错误,处理完成后再执行finally中的语句;如果没有发生错误,则执行finally中的语句。
可见无论是否发生错误,都会执行finally中的语句,所以可以在finally中编写清理工作的代码,比如释放申请的资源等。
执行流程如图4-5所示。
除了JavaScript抛出的异常外,我们也可以根据情况自己抛出异常。
JavaScript提供了关键字throw,用于抛出异常。用法如下:
throw 异常对象;
这里的异常对象可以是String、数字、布尔值或对象。
不论是JavaScript抛出的异常,还是自己抛出的异常,都会引发错误处理。
但如果没有提供处理错误的try…catch语句,则会导致程序结束。
异常处理的实例见清单4-6。
4.7.2 with语句
说到with语句就不得不提到作用域链(scope chain)的概念,所谓作用域链就是指一系列对象,用于在其中查找要使用的变量或属性。
如果要使用变量x,则会在当前对象中查找,若找到则使用这个x;若找不到,则到上一层对象中进行查找,若还是查不到,则再到上一层对象中进行查找,直到顶层对象——即全局对象——如果还查不到,则说明变量x没有声明,触发ReferenceError异常。
with语句的作用就是暂时扩充这作用域链,用指定的对象充当上层的作用域对象,换句话说,就是如果找不到要使用的变量,则会到with指定的对象中查找该变量。
有点类似于Java的import语句,如果没有学习过Java就不要管这个import了,如果学习过,则可以加深对with语句的理解。
with语句的语法格式如下:
with(对象名) {
语句;
}
with语句主要用在访问层次较深的变量的访问上,用于省略冗长的“对象名点”的书写。见清单4-6。
使用with必须注意以下几点:
◆ 在JavaScript严格模式(见4.8.3 use strict语句)下,不能使用with语句;
◆ 使用with语句的代码,JavaScript无法对其进行优化,运行效率低。
基于以上两点原因,尽量避免使用with语句,虽然(有时)它可以大幅减少代码量!
4.7.3 use strict语句
从ECMAScript 5开始引入了use strict,严格说来它并不是一条语句,而是一条指令。用于说明后面的代码运行于严格模式。语法如下:
“use strict”;
需要注意的是,这里没有关键字,只是一个普通的字符串表达式,单引号和双引号都可以。
对于以前版本的JavaScript,不支持严格模式也没有问题,只是把它作为普通表达式求值,求值后也没有使用,不会影响其他程序。
可以使用以下方法测试JavaScript是否支持严格模式:
var isStrict = (function(){“use strict”; return this === undefined;}());
这里用到了内联函数,即声明加调用同时进行,有关函数的内容将在第5章介绍。
这里用到了严格模式的一条性质:在严格模式下,任何函数调用时,调用时都会有一个值为undefined的this。在非严格格式下,this的值为全局对象。
严格模式与非严格模式有以下区别:
◆ 严格模式下禁止使用with语句。
◆ 严格模式下任意变量必须先声明后使用;非严格模式下未声明的变量当作全局变量。
◆ 严格模式下函数调用时this的值为undefined,而非严格模式下值为全局对象。
◆ 严格模式下对不可写的属性赋值,或不可扩展(继承)的对象添加新的属性,将抛出TypeError异常,而非严格模式则采取静默处理(即没有任何提示)。
◆ 严格模式下,传递给eval()的代码不能声明变量和函数。
◆ 严格模式下,对象中不能声明两个同名的属性。
◆ 严格模式下,arguments对象持有实际参数的静态拷贝。而非严格模式下,数组和函数参数则指向同一个值。
◆ 严格模式下,delete后的变量名(对
显示全部