使用try catch 要注意地方

歡迎訪問主頁,有更多文章內(nèi)容
轉載請注明原出處
原文鏈接地址:使用try catch 要注意地方

try

在平時的開發(fā)過程中try catch并不少用, 因此在開發(fā)中需要了解和運用它們的使用場景。

基本語法

try {
    //可能會導致錯誤的代碼
} catch (error) {
    //在錯誤發(fā)生時怎么處理
}finally {
     //即使報錯始終執(zhí)行
}

如果try塊中的任何代碼發(fā)生了錯誤,就會立即退出代碼執(zhí)行過程星持,然后接著執(zhí)行catch塊,此時枚冗,catch塊會接受到一個包含錯誤信息的對象座泳。都有一個保存著錯誤消息的message屬性。

當Javascript引擎執(zhí)行代碼是洒沦,發(fā)生的錯誤豹绪。可能是語法錯誤申眼,通常是程序員造成的編碼錯誤或者錯別字瞒津,也可能是來自服務器或者用戶的錯誤輸出而導致的錯誤等。

能被 try catch 捕捉到的異常括尸,必須是在報錯的時候巷蚪,線程執(zhí)行已經(jīng)進入 try catch 代碼塊,且處在 try catch 里面濒翻,這個時候才能被捕捉到屁柏。

try{
    setTimeout(()=>{
         console.log(a.b);  
    }, 100)
}catch(e){
    console.log('error',e);
}
console.log(111);
// 111
// Uncaught ReferenceError: a is not defined

setTimeout里面報錯,實際是100ms之后執(zhí)行的代碼報錯有送,此時try-catch已經(jīng)執(zhí)行完成前联,console.log都已經(jīng)被執(zhí)行完了,所以沒有辦法捕獲到異常娶眷。

finally

finally在try-catch語句中是可選的似嗤,但是finally子句一經(jīng)使用,其代碼無論如何都會執(zhí)行届宠。無論try或者catch語句塊中包含什么代碼烁落,包括return語句,都不會阻止finally子句的執(zhí)行豌注。

function testFinally(){
    try{
        return 2;
    }catch(error){
        return 1; //
    }finally{
        return 0
    }
}

從表面上看伤塌,這個函數(shù)會返回2,執(zhí)行這個函數(shù)且不會報錯轧铁,但是由于最后還有一個finally子句每聪,結果會導致該return語句忽略,所以這個函數(shù)只能返回0齿风。

切記药薯,只要代碼中包含finally子句,那么無論try還是catch語句塊中的return都將被忽略救斑。所以在使用finally之前童本,需要想清楚你的代碼應該符合你的業(yè)務邏輯。

拋出錯誤

throw操作符脸候,用于隨時拋出自定義錯誤穷娱。拋出錯誤時绑蔫,必須給throw操作符指定一個值。這個值的類型沒有限制泵额。

在遇到throw操作符是配深,代碼會立即停止執(zhí)行。僅當有try-catch語句捕獲到被拋出的值時嫁盲,代碼才能繼續(xù)執(zhí)行篓叶。

對于瀏覽器的兼容問,可以高效的定位錯誤的原因亡资。

function process(values){
    values.sort();
    for(var i = 0; i < values.length; i++){
        if(values[i]>100){
            return values[i];
        }
    }
    return -1;
}

如果執(zhí)行process這個函數(shù)是,傳入的values是一個string向叉,那么調(diào)用sort()就會報錯锥腻,對此,不同的瀏覽器會給出不同的錯誤消息母谎,但都不是特別明確瘦黑;

  • 在IE下:屬性或方法不存在
  • 在Firefox下:values.sort()不是一個函數(shù)
  • 在Safari下:值undefined不是對象
  • 在Chrome下:對象名沒有方法'sort'
  • 在Opera下:類型不匹配
    等等

為了兼容方便調(diào)試和開發(fā),可以在這個方法中加入一個類型檢測

function process1(values){
    if(!(values instanceof Array)){
        throw new Error ("process1(): Argument must be an Array");
    }
    ...
}

這樣重寫函數(shù)后奇唤,如果values的參數(shù)類型不是Array幸斥,就會拋出一個錯誤。

拋出錯誤與使用try-catch咬扇。只應該捕獲哪些我們確切地知道該如何處理的錯誤甲葬。捕獲錯誤的目的在于避免瀏覽器已默認方式處理它們,而拋出錯誤的目的在于提錯誤發(fā)生的具體原因懈贺。

常見的錯誤類型

錯誤處理的核心经窖,是首先要知道代碼里發(fā)生什么錯誤。錯誤只會在代碼運行期間出現(xiàn)梭灿,一般來說画侣,我們需要關注三種錯誤:

  • 類型轉換錯誤
  • 數(shù)據(jù)類型錯誤
  • 通信錯誤

這些錯誤分別會在特定的模式下或者沒有對值進行足夠的檢查的情況下發(fā)生。

歡迎訪問主頁堡妒,有更多文章內(nèi)容
轉載請注明原出處
原文鏈接地址:使用try catch 要注意地方

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末配乱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子皮迟,更是在濱河造成了極大的恐慌搬泥,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,084評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伏尼,死亡現(xiàn)場離奇詭異佑钾,居然都是意外死亡,警方通過查閱死者的電腦和手機烦粒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評論 3 392
  • 文/潘曉璐 我一進店門休溶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來代赁,“玉大人,你說我怎么就攤上這事兽掰“虐” “怎么了?”我有些...
    開封第一講書人閱讀 163,450評論 0 353
  • 文/不壞的土叔 我叫張陵孽尽,是天一觀的道長窖壕。 經(jīng)常有香客問我,道長杉女,這世上最難降的妖魔是什么瞻讽? 我笑而不...
    開封第一講書人閱讀 58,322評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮熏挎,結果婚禮上速勇,老公的妹妹穿的比我還像新娘。我一直安慰自己坎拐,他們只是感情好烦磁,可當我...
    茶點故事閱讀 67,370評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著哼勇,像睡著了一般都伪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上积担,一...
    開封第一講書人閱讀 51,274評論 1 300
  • 那天陨晶,我揣著相機與錄音,去河邊找鬼帝璧。 笑死珍逸,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的聋溜。 我是一名探鬼主播谆膳,決...
    沈念sama閱讀 40,126評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼撮躁!你這毒婦竟也來了漱病?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,980評論 0 275
  • 序言:老撾萬榮一對情侶失蹤把曼,失蹤者是張志新(化名)和其女友劉穎杨帽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體嗤军,經(jīng)...
    沈念sama閱讀 45,414評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡注盈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,599評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了叙赚。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片老客。...
    茶點故事閱讀 39,773評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡僚饭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出胧砰,到底是詐尸還是另有隱情鳍鸵,我是刑警寧澤,帶...
    沈念sama閱讀 35,470評論 5 344
  • 正文 年R本政府宣布尉间,位于F島的核電站偿乖,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏哲嘲。R本人自食惡果不足惜贪薪,卻給世界環(huán)境...
    茶點故事閱讀 41,080評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望眠副。 院中可真熱鬧画切,春花似錦、人聲如沸侦啸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,713評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽光涂。三九已至,卻和暖如春拧烦,著一層夾襖步出監(jiān)牢的瞬間忘闻,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,852評論 1 269
  • 我被黑心中介騙來泰國打工恋博, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留齐佳,地道東北人。 一個月前我還...
    沈念sama閱讀 47,865評論 2 370
  • 正文 我出身青樓债沮,卻偏偏與公主長得像炼吴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子疫衩,可洞房花燭夜當晚...
    茶點故事閱讀 44,689評論 2 354