第6章錯誤處理_第1頁
第6章錯誤處理_第2頁
第6章錯誤處理_第3頁
第6章錯誤處理_第4頁
第6章錯誤處理_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第6章 錯誤處理 在上一章中,對JavaScript的面向對象特征進行了具體的講解。在面向對象的語言中,都提供了錯誤處理這一關鍵性的語法和功能。采用了錯誤處理機制的JavaScript,能夠更好進行開發(fā)以及豐富客戶體驗。6.1 錯誤和異常 錯誤是指程序在運行過程中,遇到的導致不可運行的障礙。異常一般是指運行期錯誤,或者與預期結果不一致的運行結果。在高級語言中,錯誤處理至關重要,.NET和Java都內(nèi)置大量的錯誤類,以便開發(fā)者進行錯誤處理。本節(jié)就將向讀者講解JavaScript中的錯誤處理。6.1.1 什么是錯誤、什么是異常JavaScript中錯誤一般有3種:語法錯誤、邏輯錯誤、運行時錯誤。語

2、法錯誤,一般是指JavaScript代碼中語法不正確,解析器無法正常解析而引發(fā)的錯誤。語法錯誤很好識別,并非常容易排除。典型的語法錯誤如下所示。document.write(hello); 以上代碼,由于hello未定義和賦值,所以編譯器無法解釋,自動停止執(zhí)行這句以后的代碼。但是請注意,由于沙箱安全機制的限制,JavaScript中只有在同1個線程中的代碼會受到語法錯誤的影響。其他線程中的代碼和其他外部引用Js文件中的代碼,只要沒有錯誤代碼就可以繼續(xù)運行。通常語法錯誤很容易被發(fā)現(xiàn)及排除,所以一般性語法錯誤本章不進行專門講述。 6.1.2 異常處理的重要性在早期的瀏覽器中,并沒有異常處理機制。一

3、般情況下,函數(shù)通過返回1個無效的值,來提示開發(fā).者或用戶發(fā)生了異常。在上一節(jié)的異常示例中,可以改寫成這樣進行異常警告:function Week()var i=0;var j=15;if(i=0)return i;elsereturn j/i; 6.2 錯誤報告 錯誤報告是瀏覽器內(nèi)置的功能,當JavaScript腳本在前臺進行解釋執(zhí)行遇到錯誤,而沒有異常處理時,瀏覽器發(fā)出的錯誤提示。由于JavaScript在瀏覽器中實現(xiàn)方式不盡相同,報錯方式也五花八門。在本節(jié)中,可以對錯誤報告有1個深入的了解。6.2.1 在IE中使用錯誤報告 IE是Windows默認瀏覽器,IE提供了兩種錯誤報告方式。當客戶

4、安裝了腳本調(diào)試器(Microsoft Script Debugger),IE會采用使用消息框,通知客戶選擇是否使用調(diào)試器的方式報告錯誤。如圖所示。6.2.2 FireFox中的錯誤處理FireFox中內(nèi)置了JavaScript控制臺,不僅僅記錄錯誤,還可以發(fā)出警告。訪問FireFox的JavaScript控制臺,可以在菜單欄下的錯誤控制臺中找到。如圖所示。6.3 處理錯誤 錯誤可以通過瀏覽器支持的錯誤報告方式得知,但是異常和錯誤還是需要開發(fā)者進行一定的處理。JavaScript有兩種錯誤處理方式,BOM對象的onerror事件處理函數(shù)、try.catch語法結構來處理異常。本節(jié)將揭示兩種方式的

5、優(yōu)點、缺點。6.3.1 onerror事件處理程序當頁面中JavaScript代碼出現(xiàn)了錯誤,就會觸發(fā)onerror事件。典型的onerror錯誤處理代碼如下所示。雖然onerror錯誤處理可以進行錯誤處理,但是onerror錯誤處理有著先天缺陷:(1)onerror是BOM對象的一部分,非常依賴瀏覽器的實現(xiàn)。在IE中,當onerror事件觸發(fā)時,會繼續(xù)執(zhí)行onerror事件處理以后的代碼。但在FireFox中,當onerror事件觸發(fā)時,所有代碼都會終止。(2)onerror僅僅能處理第1個頁面代碼中出現(xiàn)的第1個異常,而且僅僅能處理onerror事件處理函數(shù)代碼之后代碼中出現(xiàn)的錯誤。因為出現(xiàn)

6、了多個異常,也只能觸發(fā)一次onerror事件處理程序。在JavaScript還有另一種錯誤處理的方式,請仔細閱讀6.3.2節(jié)。6.3.2 try catch 語法結構try catch 語法結構在大多數(shù)面向對象的語言中都得到了實現(xiàn),JavaScript也支持這個重要的異常處理功能,任何支持ECMAScript第3版的瀏覽器都支持JavaScript中的try catch 語法。但是請注意JavaScript中try catch 結構僅僅只有1個catch塊,因為JavaScript是弱類型的語言,無法得到錯誤確切類型,所以所有錯誤都由1個catch塊進行處理。trywindow.noFound

7、Function();catch(exception)alert(catch 語句塊);finallyalert(finally 語句塊); 6.4 常用JavaScript調(diào)試技巧 在上一節(jié)中,學習了基本的錯誤處理。錯誤處理是開發(fā)者豐富的客戶體驗的一種手段,但是還有很多錯誤是無法進行錯誤處理的,比如說語法錯誤和瀏覽器兼容性帶來的錯誤,都是不能通過錯誤處理規(guī)避。本節(jié)將講述如何進行JavaScript調(diào)試和調(diào)試器的使用。 JavaScript一直沒有一款良好的開發(fā)工具,給JavaScript的發(fā)展帶來了很大的阻礙,但是并沒有阻止聰明的開發(fā)者的腳步。6.4.1節(jié)將介紹一種歷史最悠久,最笨拙的Jav

8、aScript調(diào)試方法。6.4.1 使用alert()進行調(diào)試 使用alert()調(diào)試是JavaScript開發(fā)者使用的最早和最頻繁的調(diào)試方式,也是最土的一種(筆者曾經(jīng)一直認為JavaScript調(diào)試技術是JavaScript設計者設計的1個最大敗筆)。 使用alert()調(diào)試大量JavaScript代碼時,應遵循以下守則: (1)對所有函數(shù)或代碼分段都添加alert(),并根據(jù)調(diào)用先后順序對所有添加的alert()進行排序。 (2)當確定錯誤位置以后,就可以使用alert()彈出對話框來檢查變量的值。但是請注意,盡量避免將alert()放入循環(huán)中。因為如果遇到死循環(huán),關掉瀏覽器都很困難。 6

9、.4.2 拋出自定義錯誤前面學習了throw關鍵字,實際上使用throw關鍵字可以很方便的調(diào)試JavaScript代碼。拋出自定義錯誤,可以準確的得知錯誤出現(xiàn)的位置和規(guī)避某些錯誤。以下的代碼演示了如何拋出自定義錯誤:function createError(message)if(typeof(message)=undefined)throw new Error(傳入的對象未定義);elsealert(message); 6.4.3 常見的JavaScript調(diào)試器對于.NET程序員而言,IE一定是使用最多的瀏覽器了。Microsoft提供了在IE中使用的JavaScript調(diào)試器即Micros

10、oft Script Debugger。Microsoft Script Debugger是第一種應用于IE中的腳本調(diào)試工具,Microsoft Script Debugger有兩個版本的安裝文件:scd10chs.exe、dbg10chs.exe。scd10chs.exe支持Windows NT4.0以上的版本即Windows XP或Windows 2003,dbg10chs.exe支持Windows 2000或Windows 98等低版本的操作系統(tǒng)。實際上Microsoft Script Debugger第一次出現(xiàn)在Microsoft Visual Studio 6.0中,最早實際上是為了

11、ASP調(diào)試工具出現(xiàn)的。在后期微軟擴展了Microsoft Script Debugger的功能,開始支持Jscript的調(diào)試以及JavaScript的調(diào)試。6.5 常見的JavaScript編寫工具 在上一節(jié)中,講解了拋出錯誤和Microsoft Script Debugger,但是還是不能根本解決在JavaScript日常編寫時出現(xiàn)的一些錯誤,本節(jié)將講解JavaScript常見編譯器,來解決編寫時的錯誤排除和提高JavaScript編寫的效率問題。 本節(jié)將講解兩種比較優(yōu)秀的JavaScript編譯器,主要推薦Aptana,筆者也一直在使用Aptana編寫JavaScript。6.5.1 常見

12、的JavaScript編寫工具在JavaScript開發(fā)中,由于一直缺乏一款較為優(yōu)秀的JavaScript編寫工具,導致JavaScript一直在后臺開發(fā)者中普及很慢。大多數(shù)程序員還停留在使用記事本,或者代碼變色功能記事本開發(fā)JavaScript的階段。雖然這樣也可以開發(fā)Ajax應用,但是在今天Ajax開發(fā)中,大量的Js腳本庫的流行的年代,使用記事本一類的工具無疑是一種愚蠢的行為。筆者一直認為工欲善其事,必先利其器,使用Dramwaver和Front Page以及記事本已經(jīng)不能適應這個時代。對于大多數(shù).NET程序員,Visual Studio .NET(以下簡稱VS)系列是使用最頻繁、最擅長的

13、開發(fā)工具了。但是VS對JavaScript支持并不好,智能提示與報錯機制都不是很全面,在本節(jié)不做詳細講解。6.5.2 Aptana的使用在上一節(jié)中,簡單介紹了Aptana,本節(jié)將細致講解Aptana的使用。Aptana有幾個版本頗為流行,其中有Aptana 3425,Aptana Studio 1.0等。Aptana這兩個版本,并沒有做大的改變,本書以Aptana Studio 1.0為準講解Aptana的使用。Aptana在設計與實現(xiàn)方面很大程度模仿了eclipes 3.1(Java開發(fā)中最流行的編譯器之一),實際上早期Aptana是以eclipes插件形式出現(xiàn)的。直到后期Aptana的開發(fā)團隊開始吸取Yahoo開發(fā)團隊在Ajax開發(fā)中的一些經(jīng)驗,并不斷征求業(yè)界關于JavaScript編譯器的要求,在2007年1月初推出第1個具有實際意義的編譯器,并不斷發(fā)出Bata版本進行測試,并不斷的更新、修正Aptana中的錯誤。6.6 小結

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論