你了解“意外处理”这个概念吗?意外处理是高级编程语言(比如 C++、 Java 以及 VBScript)的一个重要功能,它负责控制当应用程序发生错误时,应该执行什么操作。独立的 JavaScript 并不支持意外处理,这导致一些编程人员更喜欢使用 VBScript 而不是 JavaScript。但是自从出现了IE5,JavaScript 的这方面功能得以补充且增强。通过向语法中增加意外处理功能,Microsoft 将 JavaScript 提升到 C++ 和 Java 的语言标准。我们有理由相信:一些 VBScript 编程人员将很快转移到 JavaScript 的阵营中。
详细的内容是:
- 如何编写一个 JavaScript 导致意外的意外处理代码
- 如何编写一个用户导致意外的意外处理代码
- 如何在应用程序中编写用户导致意外的意外处理代码
- JavaScript 、C++ 和 Java 的意外处理区别
- JavaScript 和 VBScript 的意外处理区别
- 如何避开 JavaScript 和 VBScript 之间的矛盾
在许多编程语言中,当试图执行一个非法指令时,代码都会导致一个运行时间意外。我们可能经历的一个最微不足道的非法操作就是“除以0”错误。JavaScript 不会执行这一操作,它将给结果变量赋值为无穷大。其它的非法操作对于其它编程语言也很普遍,包括 JavaScript。访问一个空指针或一个空对象也是一个例子,访问一个超出数组合法范围的数组元素是另一个例子。
对于开发人员而言,通常是争取避免发生系统错误的。系统信息通常很含糊,一般的用户看不懂。事实上,系统错误将严重影响一个程序员的声誉,因为它们是臭虫(Bug)的清楚明白的证据。我们希望在代码中查找这些错误,在它们攻击操作系统之前发现它们以避免产生错误信息。在代码中查找意外会造成代码臃肿。当语言不支持意外处理时,将正常的代码流和错误查找混合在一起在所难免。以下的代码将查找两个错误 - 访问一个空对象和超出范围的数组元素: var newObject = createObject(dataPiece1, dataPiece2, dataPiece3); if (newObject == null) { // do something here when the object was not created ... } else { // getElementIndex return an index or -1 for an error var index = newObject.getElementIndex(); if (index == -1) { // handle the error case ... } else { { // finally, you can do something with index ... } 在 JavaScript 中支持意外处理的关键所在(在其它语言中也是一样,本文后面将做解释)是 try...catch 语句。 Try 这个关键字引导着一块可能会引起意外的正常处理代码,Catch 关键字引导着一块意外处理代码。一旦 try 这个区中引发了一个意外,程序流程的控制就切换到跟随它的第一个 catch 区域。但是一旦由 JavaScript 引发(这正是程序员所反对的),就没有机制能够断定错误的类型。以下是用来模拟上面流程的 try...catch 代码区: try { var newObject = createObject(dataPiece1, dataPiece2, dataPiece3); var index = newObject.getElementIndex(); // do something with index } catch { alert("System Error; Call your sw vendor"); } 下面是另一个例子,可以在你的计算机上实际运行: < HTML> < HEAD> < TITLE> example 1 < /TITLE> < /HEAD> < BODY> < IMG SRC="doc.gif"> < SCRIPT LANGUAGE="JavaScript1.2"> < !-- try { for (image=0; image < document.images.length + 2; image++) { alert(document.images[image].border); } } catch (kuku) { alert("We have experienced a JavaScript error"); } // --> < /SCRIPT> < /BODY> < /HTML> 这个例子中执行的意外是访问数组边界外的一个数组元素。在页面(doc.gif) 上,图形数是length (1),所以使用的最大指针是length+1 (2)。请注意传递给 catch (捕捉)区的变量kuku。JavaScript允许传递任何变量类型,在以后的页面中将做解释。虽然我们并不使用这个变量,但你必须要指定一个。 |