




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第6章 錯(cuò)誤處理 在上一章中,對(duì)JavaScript的面向?qū)ο筇卣鬟M(jìn)行了具體的講解。在面向?qū)ο蟮恼Z言中,都提供了錯(cuò)誤處理這一關(guān)鍵性的語法和功能。采用了錯(cuò)誤處理機(jī)制的JavaScript,能夠更好進(jìn)行開發(fā)以及豐富客戶體驗(yàn)。6.1 錯(cuò)誤和異常 錯(cuò)誤是指程序在運(yùn)行過程中,遇到的導(dǎo)致不可運(yùn)行的障礙。異常一般是指運(yùn)行期錯(cuò)誤,或者與預(yù)期結(jié)果不一致的運(yùn)行結(jié)果。在高級(jí)語言中,錯(cuò)誤處理至關(guān)重要,.NET和Java都內(nèi)置大量的錯(cuò)誤類,以便開發(fā)者進(jìn)行錯(cuò)誤處理。本節(jié)就將向讀者講解JavaScript中的錯(cuò)誤處理。6.1.1 什么是錯(cuò)誤、什么是異常JavaScript中錯(cuò)誤一般有3種:語法錯(cuò)誤、邏輯錯(cuò)誤、運(yùn)行時(shí)錯(cuò)誤。語
2、法錯(cuò)誤,一般是指JavaScript代碼中語法不正確,解析器無法正常解析而引發(fā)的錯(cuò)誤。語法錯(cuò)誤很好識(shí)別,并非常容易排除。典型的語法錯(cuò)誤如下所示。document.write(hello); 以上代碼,由于hello未定義和賦值,所以編譯器無法解釋,自動(dòng)停止執(zhí)行這句以后的代碼。但是請(qǐng)注意,由于沙箱安全機(jī)制的限制,JavaScript中只有在同1個(gè)線程中的代碼會(huì)受到語法錯(cuò)誤的影響。其他線程中的代碼和其他外部引用Js文件中的代碼,只要沒有錯(cuò)誤代碼就可以繼續(xù)運(yùn)行。通常語法錯(cuò)誤很容易被發(fā)現(xiàn)及排除,所以一般性語法錯(cuò)誤本章不進(jìn)行專門講述。 6.1.2 異常處理的重要性在早期的瀏覽器中,并沒有異常處理機(jī)制。一
3、般情況下,函數(shù)通過返回1個(gè)無效的值,來提示開發(fā).者或用戶發(fā)生了異常。在上一節(jié)的異常示例中,可以改寫成這樣進(jìn)行異常警告:function Week()var i=0;var j=15;if(i=0)return i;elsereturn j/i; 6.2 錯(cuò)誤報(bào)告 錯(cuò)誤報(bào)告是瀏覽器內(nèi)置的功能,當(dāng)JavaScript腳本在前臺(tái)進(jìn)行解釋執(zhí)行遇到錯(cuò)誤,而沒有異常處理時(shí),瀏覽器發(fā)出的錯(cuò)誤提示。由于JavaScript在瀏覽器中實(shí)現(xiàn)方式不盡相同,報(bào)錯(cuò)方式也五花八門。在本節(jié)中,可以對(duì)錯(cuò)誤報(bào)告有1個(gè)深入的了解。6.2.1 在IE中使用錯(cuò)誤報(bào)告 IE是Windows默認(rèn)瀏覽器,IE提供了兩種錯(cuò)誤報(bào)告方式。當(dāng)客戶
4、安裝了腳本調(diào)試器(Microsoft Script Debugger),IE會(huì)采用使用消息框,通知客戶選擇是否使用調(diào)試器的方式報(bào)告錯(cuò)誤。如圖所示。6.2.2 FireFox中的錯(cuò)誤處理FireFox中內(nèi)置了JavaScript控制臺(tái),不僅僅記錄錯(cuò)誤,還可以發(fā)出警告。訪問FireFox的JavaScript控制臺(tái),可以在菜單欄下的錯(cuò)誤控制臺(tái)中找到。如圖所示。6.3 處理錯(cuò)誤 錯(cuò)誤可以通過瀏覽器支持的錯(cuò)誤報(bào)告方式得知,但是異常和錯(cuò)誤還是需要開發(fā)者進(jìn)行一定的處理。JavaScript有兩種錯(cuò)誤處理方式,BOM對(duì)象的onerror事件處理函數(shù)、try.catch語法結(jié)構(gòu)來處理異常。本節(jié)將揭示兩種方式的
5、優(yōu)點(diǎn)、缺點(diǎn)。6.3.1 onerror事件處理程序當(dāng)頁面中JavaScript代碼出現(xiàn)了錯(cuò)誤,就會(huì)觸發(fā)onerror事件。典型的onerror錯(cuò)誤處理代碼如下所示。雖然onerror錯(cuò)誤處理可以進(jìn)行錯(cuò)誤處理,但是onerror錯(cuò)誤處理有著先天缺陷:(1)onerror是BOM對(duì)象的一部分,非常依賴瀏覽器的實(shí)現(xiàn)。在IE中,當(dāng)onerror事件觸發(fā)時(shí),會(huì)繼續(xù)執(zhí)行onerror事件處理以后的代碼。但在FireFox中,當(dāng)onerror事件觸發(fā)時(shí),所有代碼都會(huì)終止。(2)onerror僅僅能處理第1個(gè)頁面代碼中出現(xiàn)的第1個(gè)異常,而且僅僅能處理onerror事件處理函數(shù)代碼之后代碼中出現(xiàn)的錯(cuò)誤。因?yàn)槌霈F(xiàn)
6、了多個(gè)異常,也只能觸發(fā)一次onerror事件處理程序。在JavaScript還有另一種錯(cuò)誤處理的方式,請(qǐng)仔細(xì)閱讀6.3.2節(jié)。6.3.2 try catch 語法結(jié)構(gòu)try catch 語法結(jié)構(gòu)在大多數(shù)面向?qū)ο蟮恼Z言中都得到了實(shí)現(xiàn),JavaScript也支持這個(gè)重要的異常處理功能,任何支持ECMAScript第3版的瀏覽器都支持JavaScript中的try catch 語法。但是請(qǐng)注意JavaScript中try catch 結(jié)構(gòu)僅僅只有1個(gè)catch塊,因?yàn)镴avaScript是弱類型的語言,無法得到錯(cuò)誤確切類型,所以所有錯(cuò)誤都由1個(gè)catch塊進(jìn)行處理。trywindow.noFound
7、Function();catch(exception)alert(catch 語句塊);finallyalert(finally 語句塊); 6.4 常用JavaScript調(diào)試技巧 在上一節(jié)中,學(xué)習(xí)了基本的錯(cuò)誤處理。錯(cuò)誤處理是開發(fā)者豐富的客戶體驗(yàn)的一種手段,但是還有很多錯(cuò)誤是無法進(jìn)行錯(cuò)誤處理的,比如說語法錯(cuò)誤和瀏覽器兼容性帶來的錯(cuò)誤,都是不能通過錯(cuò)誤處理規(guī)避。本節(jié)將講述如何進(jìn)行JavaScript調(diào)試和調(diào)試器的使用。 JavaScript一直沒有一款良好的開發(fā)工具,給JavaScript的發(fā)展帶來了很大的阻礙,但是并沒有阻止聰明的開發(fā)者的腳步。6.4.1節(jié)將介紹一種歷史最悠久,最笨拙的Jav
8、aScript調(diào)試方法。6.4.1 使用alert()進(jìn)行調(diào)試 使用alert()調(diào)試是JavaScript開發(fā)者使用的最早和最頻繁的調(diào)試方式,也是最土的一種(筆者曾經(jīng)一直認(rèn)為JavaScript調(diào)試技術(shù)是JavaScript設(shè)計(jì)者設(shè)計(jì)的1個(gè)最大敗筆)。 使用alert()調(diào)試大量JavaScript代碼時(shí),應(yīng)遵循以下守則: (1)對(duì)所有函數(shù)或代碼分段都添加alert(),并根據(jù)調(diào)用先后順序?qū)λ刑砑拥腶lert()進(jìn)行排序。 (2)當(dāng)確定錯(cuò)誤位置以后,就可以使用alert()彈出對(duì)話框來檢查變量的值。但是請(qǐng)注意,盡量避免將alert()放入循環(huán)中。因?yàn)槿绻龅剿姥h(huán),關(guān)掉瀏覽器都很困難。 6
9、.4.2 拋出自定義錯(cuò)誤前面學(xué)習(xí)了throw關(guān)鍵字,實(shí)際上使用throw關(guān)鍵字可以很方便的調(diào)試JavaScript代碼。拋出自定義錯(cuò)誤,可以準(zhǔn)確的得知錯(cuò)誤出現(xiàn)的位置和規(guī)避某些錯(cuò)誤。以下的代碼演示了如何拋出自定義錯(cuò)誤:function createError(message)if(typeof(message)=undefined)throw new Error(傳入的對(duì)象未定義);elsealert(message); 6.4.3 常見的JavaScript調(diào)試器對(duì)于.NET程序員而言,IE一定是使用最多的瀏覽器了。Microsoft提供了在IE中使用的JavaScript調(diào)試器即Micros
10、oft Script Debugger。Microsoft Script Debugger是第一種應(yīng)用于IE中的腳本調(diào)試工具,Microsoft Script Debugger有兩個(gè)版本的安裝文件:scd10chs.exe、dbg10chs.exe。scd10chs.exe支持Windows NT4.0以上的版本即Windows XP或Windows 2003,dbg10chs.exe支持Windows 2000或Windows 98等低版本的操作系統(tǒng)。實(shí)際上Microsoft Script Debugger第一次出現(xiàn)在Microsoft Visual Studio 6.0中,最早實(shí)際上是為了
11、ASP調(diào)試工具出現(xiàn)的。在后期微軟擴(kuò)展了Microsoft Script Debugger的功能,開始支持Jscript的調(diào)試以及JavaScript的調(diào)試。6.5 常見的JavaScript編寫工具 在上一節(jié)中,講解了拋出錯(cuò)誤和Microsoft Script Debugger,但是還是不能根本解決在JavaScript日常編寫時(shí)出現(xiàn)的一些錯(cuò)誤,本節(jié)將講解JavaScript常見編譯器,來解決編寫時(shí)的錯(cuò)誤排除和提高JavaScript編寫的效率問題。 本節(jié)將講解兩種比較優(yōu)秀的JavaScript編譯器,主要推薦Aptana,筆者也一直在使用Aptana編寫JavaScript。6.5.1 常見
12、的JavaScript編寫工具在JavaScript開發(fā)中,由于一直缺乏一款較為優(yōu)秀的JavaScript編寫工具,導(dǎo)致JavaScript一直在后臺(tái)開發(fā)者中普及很慢。大多數(shù)程序員還停留在使用記事本,或者代碼變色功能記事本開發(fā)JavaScript的階段。雖然這樣也可以開發(fā)Ajax應(yīng)用,但是在今天Ajax開發(fā)中,大量的Js腳本庫(kù)的流行的年代,使用記事本一類的工具無疑是一種愚蠢的行為。筆者一直認(rèn)為工欲善其事,必先利其器,使用Dramwaver和Front Page以及記事本已經(jīng)不能適應(yīng)這個(gè)時(shí)代。對(duì)于大多數(shù).NET程序員,Visual Studio .NET(以下簡(jiǎn)稱VS)系列是使用最頻繁、最擅長(zhǎng)的
13、開發(fā)工具了。但是VS對(duì)JavaScript支持并不好,智能提示與報(bào)錯(cuò)機(jī)制都不是很全面,在本節(jié)不做詳細(xì)講解。6.5.2 Aptana的使用在上一節(jié)中,簡(jiǎn)單介紹了Aptana,本節(jié)將細(xì)致講解Aptana的使用。Aptana有幾個(gè)版本頗為流行,其中有Aptana 3425,Aptana Studio 1.0等。Aptana這兩個(gè)版本,并沒有做大的改變,本書以Aptana Studio 1.0為準(zhǔn)講解Aptana的使用。Aptana在設(shè)計(jì)與實(shí)現(xiàn)方面很大程度模仿了eclipes 3.1(Java開發(fā)中最流行的編譯器之一),實(shí)際上早期Aptana是以eclipes插件形式出現(xiàn)的。直到后期Aptana的開發(fā)團(tuán)隊(duì)開始吸取Yahoo開發(fā)團(tuán)隊(duì)在Ajax開發(fā)中的一些經(jīng)驗(yàn),并不斷征求業(yè)界關(guān)于JavaScript編譯器的要求,在2007年1月初推出第1個(gè)具有實(shí)際意義的編譯器,并不斷發(fā)出Bata版本進(jìn)行測(cè)試,并不斷的更新、修正Aptana中的錯(cuò)誤。6.6 小結(jié)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 關(guān)于公司股權(quán)轉(zhuǎn)讓合同范例
- 上海工程吊車租賃合同范例
- 公會(huì)和主播合同范例
- 出售公司土地合同范例
- 產(chǎn)品購(gòu)銷運(yùn)輸合同范例
- 新型滑雪板參數(shù)化設(shè)計(jì)與制備工藝研究
- 基于AISAS模型的南昌市羽毛球愛好者消費(fèi)行為研究
- 個(gè)人股協(xié)議合同范例
- 公司借貸款合同范例
- 出售與安裝合同范例
- 醫(yī)療新技術(shù)新項(xiàng)目匯報(bào)
- 我國(guó)科技政策向創(chuàng)新政策演變的過程、趨勢(shì)與建議基于我國(guó)289項(xiàng)創(chuàng)新政策的實(shí)證分析
- 人教版新起點(diǎn)(一年級(jí)起)二年級(jí)英語下冊(cè)教案全冊(cè)
- 學(xué)校教職工代表大會(huì)代表選舉辦法
- 中國(guó)慢性鼻竇炎診斷和治療指南課件
- 古老的聲音第1學(xué)時(shí)課件-2023-2024學(xué)年高中音樂粵教花城版(2019)必修音樂鑒賞
- 雙控監(jiān)理細(xì)則
- 水上拋石專項(xiàng)方案
- 你進(jìn)步-我高興
- 勞務(wù)派遣具體服務(wù)方案
- 物理化學(xué)(下)智慧樹知到課后章節(jié)答案2023年下陜西師范大學(xué)
評(píng)論
0/150
提交評(píng)論