bcb異常處理顯示錯誤行號 友好的處理前端異常

2021-10-11 06:06:43 字數 1927 閱讀 9239

前端一直是距離使用者最近的一層,隨著產品的日益完善,我們會更加注重使用者體驗,而前端異常卻如鯁在喉,甚是煩人。

一、為什麼要處理異常?

異常是不可控的,會影響最終的呈現結果,但是我們有充分的理由去做這樣的事情。

對於 js 而言,我們面對的僅僅只是異常,異常的出現不會直接導致 js 引擎崩潰,最多隻會使當前執行的任務終止。

二、需要處理哪些異常?

對於前端來說,我們可做的異常捕獲還真不少。總結一下,大概如下:

下面我會針對每種具體情況來說明如何處理這些異常。

三、try-catch 的誤區

try-catch 只能捕獲到同步的執行時錯誤,對語法和非同步錯誤卻無能為力,捕獲不到。

1.同步執行時錯誤:

try  catch(e)
輸出:

捕獲到異常: referenceerror: nam is not defined at :3:15
2.不能捕獲到語法錯誤,我們修改一下**,刪掉乙個單引號:

try  catch(e)
輸出:

uncaught syntaxerror: invalid or unexpected token
不過語法錯誤在我們開發階段就可以看到,應該不會順利上到線上環境。

3.非同步錯誤

try , 1000)} catch(e)
我們看看日誌:

uncaught typeerror: cannot read property 'map' of undefinedat settimeout (:3:11)
並沒有捕獲到異常,這是需要我們特別注意的地方。

四、window.onerror 不是萬能的

當 js 執行時錯誤發生時,window 會觸發乙個 errorevent 介面的 error 事件,並執行 window.onerror()。

/*** @param  message 錯誤資訊* @param  source 出錯檔案* @param  lineno 行號* @param  colno 列號* @param  error error物件(物件)*/window.onerror = function(message, source, lineno, colno, error) );}
1.首先試試同步執行時錯誤

window.onerror = function(message, source, lineno, colno, error) );}jartto;
可以看到,我們捕獲到了異常:

2.再試試語法錯誤呢?

window.onerror = function(message, source, lineno, colno, error) );}let name = 'jartto
控制台列印出了這樣的異常:

uncaught syntaxerror: invalid or unexpected token
什麼,竟然沒有捕獲到語法錯誤?

3.懷著忐忑的心,我們最後來試試非同步執行時錯誤:

window.onerror = function(message, source, lineno, colno, error) );}settimeout(() => );
控制台輸出了:

捕獲到異常: {message: "uncaught referenceerror: jartto is not defined

PHP 錯誤,異常處理

ini set display errors false 影響的是否在php頁輸出錯誤資訊,但不影響在錯誤日誌檔案輸出 error reporting 0 錯誤級別,影響在php頁輸出及日誌檔案輸出 error log aaa 函式向錯誤日誌寫一條資訊,但是不受set error handler s...

通過異常處理錯誤

public class myexception extends exception public myexception string mag 在類中使用異常 public class exceptiontest 捕獲自定義異常 public static void main string arg...

錯誤與異常處理

內部錯誤 程式設計師通常無能為力,一旦發生,想辦法讓程式優雅的結束 異常 你自己程式導致的問題,可以捕獲 可以處理 異常 程式執行中的非正常事件,程式無法再按預想的流程執行 將錯誤資訊傳遞給上層呼叫者,並報告 案發現場 的資訊 執行時異常,是程式 源 中引入的故障所造成的 非執行時異常,是程式設計師...