摘要:后來(lái)當(dāng)其他地方出現(xiàn)了詭異的,定位問(wèn)題時(shí)才發(fā)現(xiàn)這里的寫(xiě)法嚴(yán)重不對(duì)。問(wèn)題分析可以肯定問(wèn)題出在異常捕獲而不是拋出。問(wèn)題解決由于是異常捕獲時(shí)候的錯(cuò)誤所以我們?cè)诓东@的時(shí)候這樣處理。至此,問(wèn)題解決。
問(wèn)題復(fù)現(xiàn)
在工作時(shí)遇到了需要拋出異常并且需要自己捕獲處理的地方,于是在拋出的地方寫(xiě)下
function parseExcel(con) { try { // doSomething } catch (error) { throw new Error("parse excel failed"); } }
在捕獲的地方寫(xiě)下:
try { parseExcel(con); } catch (error) { if (error === "parse excel failed") { //doSomething } }
當(dāng)時(shí)自己感覺(jué)妥妥的,沒(méi)毛病。
后來(lái)當(dāng)其他地方出現(xiàn)了詭異的bug,定位問(wèn)題時(shí)才發(fā)現(xiàn)這里的寫(xiě)法嚴(yán)重不對(duì)。
可以肯定問(wèn)題出在異常捕獲而不是拋出。
這里是使用了throw來(lái)拋出異常,并且還是使用
throw new Error("error message");
這樣的實(shí)例化寫(xiě)法,這樣的寫(xiě)法是很規(guī)范的,是js規(guī)范所推崇的。但是這里需要注意的是,throw出去的是一個(gè)Error對(duì)象,而類似下面的這種字符串
throw "error message"; // 不建議的寫(xiě)法
所以捕獲的時(shí)候捕獲到的也是一個(gè)對(duì)象,這樣一個(gè)對(duì)象與parse excel failed字符串比較顯然是不正確的。
那么該怎么去捕獲這個(gè)error message呢?
通過(guò)對(duì)《JavaScript高級(jí)程序設(shè)計(jì) (第三版) 》對(duì)于拋出錯(cuò)誤的學(xué)習(xí)我們可以了解到:
在拋出的Error對(duì)象中有一個(gè)被廣泛支持的屬性:name、message。
name:用來(lái)存儲(chǔ)錯(cuò)誤的類型,在ECMA-262定義了七種錯(cuò)誤類型:Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError。詳情見(jiàn):try-catch語(yǔ)句
message:用來(lái)存儲(chǔ)error message,就是你new Error()時(shí)候穿進(jìn)去的參數(shù)
到此,上面的問(wèn)題應(yīng)迎刃而解。
問(wèn)題解決由于是異常捕獲時(shí)候的錯(cuò)誤所以我們?cè)诓东@的時(shí)候這樣處理
try { parseExcel(con); } catch (error) { if (error。message === "parse excel failed") { //doSomething } }
至此,問(wèn)題解決。
反思我在這之前是從未試用過(guò)throw的,在用的時(shí)候也是從不深究,馬馬虎虎拿來(lái)就用,如果不是因?yàn)楹髞?lái)出了問(wèn)題去解決,估計(jì)不會(huì)發(fā)現(xiàn)原來(lái)js的錯(cuò)誤處理還有很多道道。寫(xiě)程序是一件很嚴(yán)謹(jǐn)?shù)氖虑?,一絲一毫也馬虎不得,更不可想當(dāng)然。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/84798.html
摘要:由虛擬機(jī)生成并拋出,,屬于系統(tǒng)內(nèi)部錯(cuò)誤或者資源耗盡等嚴(yán)重情況,屬于需要擔(dān)負(fù)的責(zé)任,這一類異常事件是無(wú)法恢復(fù)或者不可能捕獲的,將導(dǎo)致應(yīng)用程序中斷,但是自定義是可以捕獲的。 題目 showImg(http://img-storage.qiniudn.com/15-9-22/50608386.jpg); 答案:D 分析 Java 異常的結(jié)構(gòu)體系 showImg(http://img-stor...
摘要:最受歡迎的引擎是,在和中使用,用于,以及所使用的。怎么處理每個(gè)引擎都有一個(gè)基本組件,稱為調(diào)用棧。也就是說(shuō),如果有其他函數(shù)等待執(zhí)行,函數(shù)是不能離開(kāi)調(diào)用棧的。每個(gè)異步函數(shù)在被送入調(diào)用棧之前必須通過(guò)回調(diào)隊(duì)列。例如方法是在中傳遞的回調(diào)函數(shù)。 ? 翻譯:瘋狂的技術(shù)宅 原文:www.valentinog.com/blog/engine… 從Call Stack,Global Me...
摘要:最受歡迎的引擎是,在和中使用,用于,以及所使用的。單線程的我們說(shuō)是單線程的,因?yàn)橛幸粋€(gè)調(diào)用棧處理我們的函數(shù)。也就是說(shuō),如果有其他函數(shù)等待執(zhí)行,函數(shù)是不能離開(kāi)調(diào)用棧的。每個(gè)異步函數(shù)在被送入調(diào)用棧之前必須通過(guò)回調(diào)隊(duì)列。 翻譯:瘋狂的技術(shù)宅原文:https://www.valentinog.com/bl... 本文首發(fā)微信公眾號(hào):前端先鋒歡迎關(guān)注,每天都給你推送新鮮的前端技術(shù)文章 sh...
摘要:幸運(yùn)的是,使用符號(hào)創(chuàng)建的構(gòu)造器,如果在不使用來(lái)調(diào)用,則始終會(huì)報(bào)錯(cuò),即使在非嚴(yán)格模式下也不會(huì)產(chǎn)生問(wèn)題。 來(lái)源:ApacheCN『JavaScript 編程精解 中文第三版』翻譯項(xiàng)目原文:Bugs and Errors 譯者:飛龍 協(xié)議:CC BY-NC-SA 4.0 自豪地采用谷歌翻譯 部分參考了《JavaScript 編程精解(第 2 版)》 調(diào)試的難度是開(kāi)始編寫(xiě)代碼的兩倍。 因此,如...
摘要:提供一套錯(cuò)誤處理機(jī)制,錯(cuò)誤是干擾程序正常流程的非正常的事故。構(gòu)造函數(shù)是通用錯(cuò)誤類型,除了類型,還有等類型。瀏覽器輸出其他錯(cuò)誤類型構(gòu)造函數(shù)是繼承,實(shí)例是一致的。數(shù)值超出有效范圍數(shù)值超出有效范圍創(chuàng)建一個(gè)實(shí)例,表示錯(cuò)誤的原因無(wú)效引用。 同步發(fā)布于 https://github.com/xianshanna... 我的建議是不要隱藏錯(cuò)誤,勇敢地拋出來(lái)。沒(méi)有人會(huì)因?yàn)榇a出現(xiàn) bug 導(dǎo)致程序崩潰...
閱讀 3081·2021-09-24 10:26
閱讀 3236·2021-09-23 11:54
閱讀 4645·2021-09-22 15:33
閱讀 2243·2021-09-09 09:33
閱讀 1642·2021-09-07 10:10
閱讀 950·2019-08-30 11:09
閱讀 2840·2019-08-29 17:13
閱讀 993·2019-08-29 12:35