一:錯誤捕獲 1.try-catch 語句(錯誤捕獲) try{ //這裡放置可能出現問題的代碼 }catch(error){ //錯誤發生時執行的代碼 console.log(error.name) //列印錯誤類型 console.log(error.message) //列印錯誤消息 } 說明 ...
一:錯誤捕獲
1.try-catch 語句(錯誤捕獲)
try{ //這裡放置可能出現問題的代碼 }catch(error){ //錯誤發生時執行的代碼 console.log(error.name) //列印錯誤類型 console.log(error.message) //列印錯誤消息 }
說明:如果try中的代碼出現任何錯誤,就會立即退出代碼執行過程,接著執行catch塊。執行過catch塊之後,瀏覽器預設錯誤已經處理。
2.finally 字句
try{ }catch(error){ }finally{ }
說明:無論try裡面的語句有沒有報錯,catch裡面的語句有沒有執行到,都會執行finally語句
例:
function test(){ try{ return 1 }catch(error){ return 2 }finally{ return 0 } }
執行test函數,始終會返回0 因為最終都會執行finally塊。
3.錯誤類型
Error:基類型,所有錯誤都繼承該類型
EvalError:使用eval()函數(該函數可以執行js代碼語句)異常時候拋出。通常是沒有直接調用該函數會導致該錯誤
RangeError:數值超出相應範圍觸發 例如:定義一個長度為 -20 位的數組 var array = new Array(-20)
ReferenceError:找不到對象時觸發 例如:var obj = x 在變數x未定義的情況下 拋出錯誤
SyntaxError:傳入eval()函數的代碼出現錯誤時拋出
TypeError:最常見,執行特定類型的操作時,變數的類型不符合要求導致 例如:訪問不存在的方法、變數中保存著意外的類型
總結:什麼時候試用try-catch語句捕獲錯誤?
通常在大型的項目中,或者使用別人的庫,源代碼不能修改 處理那些我們無法控制的錯誤。
當你明確自己的代碼在何時何地會出現什麼錯誤,使用try-catch語句就不太合適了
二:錯誤拋出
1.throw 使用throw 操作符代碼會立即停止執行,除非使用try-catch捕獲錯誤
基本語法 throw new Error('您要自定義的錯誤信息') throw new TypeError()...................
自定義錯誤類型
function MyError(message){ this.name = MyError this.message = message } MyError.prototype = new Error() //繼承Error 因為Error是所有錯誤類型的基類 使用:throw new MyError('我自己定義的錯誤類型')
完整案例:
function test(array){ if(!(array instanceof Array)){ throw new Error('參數不是數組') } array.sort(); for(var i = 0;i<array.length;i++){ if(array[i]>100){ return array[i]; } } return -1; }; 執行該函數需要傳遞一個數組類型的參數 首先驗證參數是不是數組,如果不是數組則拋出錯誤
總結:捕獲錯誤的目的為了防止瀏覽器以預設的行為處理錯誤,拋出錯誤的目的是可以獲取詳細具體的錯誤信息