JavaScript的錯誤處理
一、錯誤類型
Error
EvalError
RangeError
ReferenceError
syntaxError 語法錯誤
TypeError
URIError
Error是基類型,其他錯誤類型都繼承自該對象,因此所有的錯誤類型都共享一組相同的屬性。該錯誤類型很少見。
EvalError是使用eval()函數而發生的異常拋出的,當沒有吧eval()當成一個函數使用的時候就會拋出。
RangeError
數值超出一定的範圍會觸發,在找不到對象的時候也會觸發,在未聲明時候去使用變量時候也會觸發
TypeError
類型錯誤,最常見的額類型錯誤就是傳遞給函數的參數事先未檢查
二、try-catch語句
try{ leaf() } catch(error){ console.log(error.message); }
//leaf is not defined
三、finally
可選的,但是一旦使用,其代碼無論如何都會執行,即使前面使用了return
try{ return 1; }catch(error){ return 2; }finally{ return 3; } //chrome下報錯了Uncaught SyntaxError: Illegal return statement
四、拋出錯誤 throw操作
在遇到throw符號的時候,代碼會立即執行。僅當try-catch語句捕獲到被拋出的值的時候,代碼才會繼續執行。
throw new Error(‘something bad hanppened‘);
五、Error事件
任何沒有通過try-catch處理的錯誤都會觸發window對象的error事件。只要發生錯誤,無論是不是瀏覽器生成的,都會觸發error事件,並執行這個事件的處理函數。img的沒有獲得正確的src也會觸發。
六、常見的錯誤類型
1、類型轉換錯誤
console.log(1==true) //true
console.log(1==true) //false
在if()之類的判斷語句中,在執行下一步的時候,會自動的把任何值轉換成布爾值。
方案: 建議使用 === !== 操作符
2、數據類型錯誤
比如
null 和undefined 使用點操作
對非數組的值使用sort()的reversed()等方法
方案:
基本類型(undefined null boolean string number)用typeof去檢測;
對象則用instanceof去檢測(註意array比較特別)
3、通信錯誤
不正確的使用URL和在服務器響應的數據不正確的時候
解決,將數據發給服務器應該使用encodeURIComponent()對數據進行編碼。
七、總結
避免瀏覽器響應JavaScript錯誤的方法
1、在可能發生錯誤的地方使用try-catch語句,這樣有機會以適當的方式對錯誤給出響應,不必沿用瀏覽器的錯誤機制。
2、是當時會用window.onerror事件處理程序,此方法可以處理try-catch不能處理的所有錯誤。
3、發生書錯誤的主要原因
類型轉換,
未充分檢測數據類型
發送到服務器或從服務器接收的數據有誤
JavaScript的錯誤處理