中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JS中的try catch語句有什么作用

發布時間:2021-09-24 09:41:30 來源:億速云 閱讀:177 作者:柒染 欄目:web開發

這期內容當中小編將會給大家帶來有關JS中的try catch語句有什么作用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

程序是從上到下順序執行的,同時可以通過一些控制語句來改變執行的路線,受控制語句影響下,程序最終的執行路線就是控制流。

js 里面的控制語句有 if、for、while、try catch 等,它們都會改變程序的走向。

程序是操作數據的,隨著程序的運行,也就是控制流的前進而改變的數據叫做數據流。

很明顯,數據流是依賴控制流的,程序分析里面的數據流分析也是要先做控制流分析。

比如這樣一段代碼:

const a = 1;
let b;

if (a === 1) {
    b = '1111';
} else {
    b = '2222';
}

因為 a 為 1,所以會執行到 b = '1111';,這就是控制流,也就是程序最終執行的代碼,可以用來分析程序的走向,做一些死代碼刪除之類的優化。

而隨著控制流的執行,b 會被賦值為 2222,這就是數據流,也就是值的變化的過程,可以用來分析某個語句的變量的值。

程序是針對不同數據做不同的處理,如果數據有錯誤,那么處理程序也就沒法處理了,就會報錯,會中斷后續的控制流。比如數據為空、數據格式不對等等。這時候就要通過 try catch 做錯誤處理,也叫異常處理。

我們做異常處理有兩個目的:

  • 對出錯的邏輯做一些兜底處理。

比如參數解析有錯誤的時候,在 catch 里賦一個默認值。這種錯誤處理之后就沒必要再報出來了。這種情況下 try catch 也是作為邏輯的一部分,相當于 if else。

  • 對報的錯做更場景化的描述。

JS 的報錯是 JS 引擎拋出的,比如調用了一個 null 對象的方法會報 TypeError,使用了未聲明的變量會報 ReferenceError。而具體的 Error 是在不同場景下報出的,就有不同的含義:

如果這個對象是來自用戶輸入的,那就是用戶輸入的有錯誤,如果這個對象是從服務端獲取的,那就意味著服務端返回的數據有錯誤。在不同的場景下,同一個 Error 會有更具體的含義,所以我們要做 try catch。然后拋出一個自定義的錯誤,包含有場景信息的錯誤描述。

這點很多庫和框架做的都比較好,報出的錯都是有具體的場景信息,甚至還有解決方式,而且還有的通過錯誤編號做了管理,可以通過 errorno 來查詢解決方式。這種就是對錯誤做了自定義的處理。

而很多業務代碼中報的錯就并沒有做這種處理,是直接把原生 Error 給報出來了。我們會通過異常監控平臺來收集一些 throw 到全局的錯誤,而這些錯誤往往都是比較原始的信息,雖然帶上了錯誤位置和堆棧,但還要通過看源碼來定位問題。

比如報了一個對象為空的錯誤,但是我怎么知道這是什么對象為空,會是什么原因,怎么解決,有沒有編號。

如果我們能夠對各種錯誤 catch 之后 throw 出一些具體場景的自定義錯誤,那是不是就好的多了。這點第三方庫都做得很好,而業務代碼很少有人注重場景化的自定義錯誤。

當然,前端業務代碼的用戶是通過界面來使用該軟件的,其實只要對各種錯誤做一些 UI 上的提示就可以。而庫的代碼是給開發者用的,那么就要對各種錯誤做場景化的描述,甚至給錯誤編號并給出解決方案。

但我覺得業務代碼也應該像第三方庫代碼那樣來對待錯誤,不要把沒有啥意義的原生錯誤報出來,而是報一些有具體含義的自定義錯誤,這樣排查和解決問題就會簡單很多。

不過雖然場景化的自定義錯誤可以更好的幫助排查問題,那也一定是建立在對該段代碼可能報的錯誤有把握的情況下。要是自己報出的錯誤信息和實際的錯誤原因不一樣,反而會增加排查問題的難度,還不如把原生錯誤報出來。

程序執行的流程是控制流,受控制語句影響,執行的過程中會改變數據,數據的變化叫做數據流,控制流和數據流是程序分析里面經常分析的兩個方面。

錯誤會中斷控制流,我們要對錯誤做一些處理,通過 try catch。

錯誤處理有兩個目的:

一個是做一些兜底的處理,相當于 if else,不需要再把錯誤報出來。

一個是做對原生的 JS 錯誤做場景化的描述,創建一個有更具體信息的錯誤對象拋出來。

這點很多庫做的很好,甚至還會給錯誤編號并給出解決方式。但業務代碼其實很多只做了給用戶的 UI 上的反饋,沒有對拋出的錯誤做場景化的包裝。這就導致了錯誤監控平臺收集到的錯誤都是比較原始的錯誤,需要查看源碼來排查。如果也能像庫的代碼那樣做一些場景化的錯誤包裝,統計和排查起問題來會容易很多,這點大多數 Javascript 工程師都沒做到。

上述就是小編為大家分享的JS中的try catch語句有什么作用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

延庆县| 五大连池市| 镇宁| 望谟县| 邹平县| 白朗县| 哈密市| 忻州市| 五河县| 体育| 衡水市| 平遥县| 龙口市| 突泉县| 西平县| 福泉市| 泽州县| 阿荣旗| 丹阳市| 长汀县| 博白县| 仁化县| 城固县| 西安市| 盐亭县| 白朗县| 新郑市| 亳州市| 多伦县| 富蕴县| 连州市| 郎溪县| 岳普湖县| 剑川县| 顺义区| 屯门区| 邻水| 昆明市| 河曲县| 工布江达县| 潞城市|