一:錯誤捕獲javascript
1.try-catch 語句(錯誤捕獲)java
try{ //這裏放置可能出現問題的代碼 }catch(error){ //錯誤發生時執行的代碼 console.log(error.name) //打印錯誤類型 console.log(error.message) //打印錯誤消息 }
說明:若是try中的代碼出現任何錯誤,就會當即退出代碼執行過程,接着執行catch塊。執行過catch塊以後,瀏覽器默認錯誤已經處理。數組
2.finally 字句瀏覽器
try{ }catch(error){ }finally{ }
說明:不管try裏面的語句有沒有報錯,catch裏面的語句有沒有執行到,都會執行finally語句函數
例:this
function test(){ try{ return 1 }catch(error){ return 2 }finally{ return 0 } }
執行test函數,始終會返回0 由於最終都會執行finally塊。
3.錯誤類型prototype
Error:基類型,全部錯誤都繼承該類型對象
EvalError:使用eval()函數(該函數能夠執行js代碼語句)異常時候拋出。一般是沒有直接調用該函數會致使該錯誤blog
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; }; 執行該函數須要傳遞一個數組類型的參數 首先驗證參數是否是數組,若是不是數組則拋出錯誤
總結:捕獲錯誤的目的爲了防止瀏覽器以默認的行爲處理錯誤,拋出錯誤的目的是能夠獲取詳細具體的錯誤信息