本文實例講述了JavaScript錯誤處理操作。分享給大家供大家參考,具體如下:
良好的錯誤處理機制可以讓用戶得到及時的提醒,所以讓我們來看看 JavaScript 提供了哪些針對錯誤處理的工具和方法吧O(∩_∩)O~
ECMA-262 第 3 版引入了 try-catch 語句,這時 JavaScript 處理異常的標準方式:
try{ //可能會導致錯誤的代碼} catch (error){ //錯誤處理}如果 try 塊中的代碼發(fā)生了錯誤,會立即執(zhí)行 catch 塊的代碼。 catch 塊有一個包含錯誤信息的對象,它有一個 message 屬性,表示的是瀏覽器給出的錯誤消息:
<script type="text/javascript"> try { window.someNonexistenceFunction(); } catch (error) { console.log(error.message); }</script>message 屬性是所有的瀏覽器都支持的屬性,所以在跨瀏覽器編程中,最好只使用這個屬性。
finally 子句是可選的,如果使用了 finally 子句,里面包含的代碼是絕對會被執(zhí)行的!甚至連 return 語句都無法阻止它被執(zhí)行:
<script type="text/javascript"> function testFinally() { try { return 2; } catch (error) { return 1; } finally { return 0; } } console.log(testFinally());//0</script>IE7 及更早的版本有一個 bug:除非有 catch 子句,否則 finally 中的代碼永遠不會被執(zhí)行!IE8 修復了這個 bug。
注意:只要在代碼中使用了 finally 子句,那么不管 return 放在 try 還是 catch 語句中,都會被忽略!
當錯誤發(fā)生時,會拋出相應類型的錯誤對象。ECMA-262 定義了 7 種錯誤類型:
Error EvalError RangeError ReferenceError SyntaxError TypeError URIError1.2.1 Error
Error 是基類型,即其他的錯誤類型都是從 Error 繼承來的。可以利用 Error 來自定義錯誤類型。
1.2.2 EvalError
EvalError 是在使用 eval() 函數發(fā)生異常時被拋出。怎么才算是異常呢?如果沒有把 eval() 當作函數來使用,就會拋出 EvalError:
new eval();//拋出 EvalErroreval = foo;//拋出 EvalError
實際開發(fā)中很少這樣使用 eval() 函數的(除非腦袋秀逗了O(∩_∩)O~),所以很少會遇到 EvalError。
1.2.3 RangeError
RangeError 會在數值超出規(guī)定范圍時被拋出。比如在定義數組時,指定了數組不支持的數組項數,就會拋出這個錯誤:
var item1 = new Array(-20);//拋出 RangeErrorvar item1 = new Array(Number.MAX_VALUE);//拋出 RangeError
1.2.4 ReferenceError
找不到對象時,會拋出 ReferenceError(這就是瀏覽器的知名的 “object expected” 錯誤)。一般在訪問不存在的變量時,會拋出這個錯誤:
新聞熱點
疑難解答
圖片精選