try…catch 結構


try…catch 結構

一旦發生錯誤,程序就中止執行了。JavaScript 提供了try...catch結構,允許對錯誤進行處理,選擇是否往下執行。

try { throw new Error('出錯了!'); } catch (e) { console.log(e.name + ": " + e.message); console.log(e.stack); } // Error: 出錯了! // at <anonymous>:3:9 // ... 

上面代碼中,try代碼塊拋出錯誤(上例用的是throw語句),JavaScript 引擎就立即把代碼的執行,轉到catch代碼塊,或者說錯誤被catch代碼塊捕獲了。catch接受一個參數,表示try代碼塊拋出的值。

如果你不確定某些代碼是否會報錯,就可以把它們放在try...catch代碼塊之中,便於進一步對錯誤進行處理。

try { f(); } catch(e) { // 處理錯誤 } 

上面代碼中,如果函數f執行報錯,就會進行catch代碼塊,接着對錯誤進行處理。

catch代碼塊捕獲錯誤之后,程序不會中斷,會按照正常流程繼續執行下去。

try { throw "出錯了"; } catch (e) { console.log(111); } console.log(222); // 111 // 222 

上面代碼中,try代碼塊拋出的錯誤,被catch代碼塊捕獲后,程序會繼續向下執行。

catch代碼塊之中,還可以再拋出錯誤,甚至使用嵌套的try...catch結構。

var n = 100; try { throw n; } catch (e) { if (e <= 50) { // ... } else { throw e; } } // Uncaught 100 

上面代碼中,catch代碼之中又拋出了一個錯誤。

為了捕捉不同類型的錯誤,catch代碼塊之中可以加入判斷語句。

try { foo.bar(); } catch (e) { if (e instanceof EvalError) { console.log(e.name + ": " + e.message); } else if (e instanceof RangeError) { console.log(e.name + ": " + e.message); } // ... } 

上面代碼中,catch捕獲錯誤之后,會判斷錯誤類型(EvalError還是RangeError),進行不同的處理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM