PHP很少用到錯誤處理,因為框架幫了大忙,所以基本上沒有主動接手過PHP的錯誤。PHP是偏后端的動態處理語言,和用戶的關系不大,所以用戶不會關心是否出現了報錯。但是JavaScript就非常不同了,js的錯誤非常明顯,稍微優點網絡基礎的人,都會迅速打開F12查看錯誤,最近再做一個需要大量js的項目,大量原生js,jq框架以及其他的插件混合再一起,所以難免會出現一些莫名其妙的問題。有時候看看滿滿的紅色報錯,就會想會有哪個用戶會打開看到呢?經過查找資料(犀牛書)終於找到了JavaScript錯誤處理的機制,以即解決方案。
一、JavaScript錯誤(Error)與異常(Exception)的區別。
這里仔細區分Error與Exception的區別。在網上查找資料,找到的大部分都是Java方面的資料,對照JS起始也可以得出js的錯誤與異常。
Error(錯誤)表示系統級的錯誤和程序不必處理的異常,是java運行環境中的內部錯誤或者硬件問題,比如,內存資源不足等,對於這種錯誤,程序基本無能為力,除了退出運行外別無選擇。 Exception(違例)表示需要捕捉或者需要程序進行處理的異常,它處理的是因為程序設計的瑕疵而引起的問題或者在外的輸入等引起的一般性問題,是程序必須處理的。
一言以蔽之:Error是代碼在編譯的時候就出現了錯誤,代碼無法編譯,比如語法錯誤,必須修正錯誤后才能重新編譯。代碼無法跳過錯誤。
Exception是代碼再運行的時候,出現了錯誤,比如對象中某個屬性不存在,或者是數據類型不對。代碼可以繼續執行,不過會在控制台中輸出一段錯誤,提醒程序員。
那我們所講的錯誤處理,基本上指的是第二種Exception的情況,用try catch 或者onerror來進行捕獲。
二、 JavaScript錯誤是怎么輸出到控制台的 —— JavaScript的錯誤處理原理。
當拋出異常時,JavaScript解釋器會立即停下當前正在執行的邏輯,並且跳到最近的異常處理程序(可以參考冒泡與變量作用域的相關概念。一句話簡單理解:兒子犯了錯誤,找老子,一層一層往上找,直到找到能夠承擔錯誤的對象為止)。如果在所有的詞法結構和調用棧上面沒有找到錯誤處理程序。JavaScript就會把異常當做程序錯誤處理,並報告給用戶。
三、使用 try catch finally 處理程序
語法如下
try{ //這里放置可能會出錯的代碼 } catch(e) { //代碼出錯后執行這里。 } finally { //不管代碼是否報錯,都將執行這里。 }
三 、使用 window.onerror
window.onerror = dieError; function dieError(msg,url,line){ var txt = "ERROR: "+msg+"\n"; txt += "URL: "+url+"\n"; txt += "LINE: "+line+"\n"; alert(txt); return true; }
個人感覺這個Window.onerror 用處不大,可能是因為出現較為早的原因吧,已經有了更好的處理方法替代。