廖雪峯老師的javascript教程學習筆記javascript
JavaScript 提供了像Java同樣的錯誤處理機制,即try catch finally.
例如:java
try{ var s = null; s.length; // TypeError: Cannot read property 'lenght' of null }catch(err){ console.log('null pointer' + err); }finally{ // clear resource. }
其中catch不是必須的,finally也不是必須的,但兩者必須有其一,其中finally是一定會被執行的。異步
錯誤類型,TypeError繼承於Error,還有ReferenceError等錯誤處理對象,能夠經過捕獲到的e,經過instance判斷出的具體的Error類型。函數
它還容許拋出異常,關鍵字throw,像java同樣。學習
var n = 'ss'; if(isNaN(n)){ throw new Error('input error'); }
實際上,JavaScript容許拋出任意對象,包括數字、字符串。可是,最好仍是拋出一個Error對象。線程
向上一層傳遞,就像Java的Exception同樣,Java會把整個調用棧都會打出來,JS也一樣。code
JavaScript引擎是一個事件驅動的執行引擎,代碼老是以單線程執行,而回調函數的執行須要等到下一個知足條件的事件出現後,纔會被執行。對象
function printTime() { throw new Error(); } try { setTimeout(printTime, 1000); console.log('done'); } catch (e) { alert('error'); }
其中window.setTimeout(func, delay, pars...)其中func函數將在超時後執行。因爲是異步,因此setTimeout會當即執行完成,並執行下一句打印log,而後等到超時後,被觸發執行,而後throw error,而這時並不會被catch。繼承