理解javascript中try...catch...finally
本文為大家分析了javascript中try...catch...finally的使用方法,分享給大家供大家參考,具體內(nèi)容如下
稍微復(fù)雜一點點,就要用到判斷語句,if else進行條件判斷,話說if條件else否則,這樣的判斷對于寫程序代碼的碼儂已經(jīng)是非常熟悉不過了。
如果你覺得這個也很簡單,可能會用到混合if else條件判斷語句加上try catch 來處理語句,雖然用try catch能處理任何的對象,通過throw扔一條有錯誤的語句,接著catch拋出該對象或者該對象的錯誤,今天我們只說try...catch,下面的例子分別拋出數(shù)組、時間、原型函數(shù)、數(shù)字類型等。
function trycatch () { var array = [234], newdate = new Date(), fun = function(){}, is = 12.22, call; try{ throw array + '\n' + newdate.toLocaleString() + ' \n' + fun.prototype.constructor + '\n' + (typeof is == 'number') +' \n' + call ; //小心local后面還有一個'e' } catch(e){ console.log(e); } finally{ console.log('err finally'); } } trycatch () // 輸出: // 234 // 2015/10/12 下午10:07:03 // function (){} // true // undefined
更準確的說,try內(nèi)放一條可能產(chǎn)生錯誤的語句。當(dāng)try語句開始執(zhí)行并拋出錯誤時,catch才執(zhí)行內(nèi)部的語句和對應(yīng)的try內(nèi)的錯誤信息message。何時執(zhí)行finally語句,只有當(dāng)try語句和catch語句執(zhí)行之后,才執(zhí)行finally語句,不論try拋出異?;蛘遚atch捕獲都會執(zhí)行finally語句。
function trycatch () { try{ throw new Error('koringz'); } catch(e){ console.log(e.message); } finally{ console.log('err finally'); } } trycatch () // 輸出: // koringz // err finally
通過try扔出一條錯誤的語句,我們看到在catch捕獲到一條錯誤的的信息// koringz,但是同樣的finally也輸出了// err finally。雖然我們了解try catch工作流的處理方式,但是并不了解finally塊的代碼處理程序,按照以往我們對finally語句一貫的思維方式,就是finally輸出不受try和catch的限制和約束。以下是finally的幾個輸出演示代碼:
function trycatch () { try{ throw new Error('koringz'); } finally{ console.log('err finally'); return console.log('new finally') } } trycatch () // err finally // new finally
如上所示,try扔一條錯誤的語句,finally輸出的結(jié)果是: // err finally // new finally。
function trycatch () { try{ throw new Error('koringz'); } catch(e){ console.log('err finally'); return console.log('new finally') } } trycatch () // err finally // new finally
如上所示,try扔一條錯誤的語句,catch捕獲到錯誤輸出結(jié)果同上finally。 // err finally // new finally。
當(dāng)我修改try的語句:
function trycatch () { try{ // } catch(e){ console.log('err finally'); return console.log('new finally') } } trycatch () // 空(viod) // 空(viod)
結(jié)果就輸出都為空。// 空(viod)。因為try沒有扔出錯誤,所以catch沒有捕獲到異常,故輸出結(jié)果就為空。
那么我們再看看下面這個案例,通過下面的例子,可能會讓你更加地了解try catch語句的異常處理。
try{ try{ throw new Error('open'); } catch(e){ console.info(e.message); throw e } finally{ console.log('finally'); } } catch(e){ console.log('op',e.message); } // open // finally // op open
當(dāng)我們在try可能引發(fā)錯誤的代碼塊內(nèi)嵌套try catch,通過嵌套的代碼塊try內(nèi)扔一條可能出現(xiàn)錯誤的語句 throw new Error('open');,緊接著嵌套的try將錯誤傳遞給嵌套的catch處理,最終通過嵌套的finally運行過后,我們看到最后一條結(jié)果// op open,其實嵌套的catch捕獲的錯誤信息扔給最外層catch捕獲的。// op open
也就是說:任何給定的異常只會被離它最近的封閉catch塊捕獲一次。
當(dāng)然,在“內(nèi)部”塊拋出的任何新異常(因為catch塊里的代碼也可以拋出異常),都將會被“外部”塊所捕獲。
以上就是本文的全部內(nèi)容,希望對大家學(xué)習(xí)javascript程序設(shè)計有所幫助。
相關(guān)文章
微信小程序自定義tabbar custom-tab-bar 6s出不來解決方案(cover-view不兼容)
這篇文章主要介紹了微信小程序自定義tabbar custom-tab-bar 6s出不來解決方案,cover-view不兼容問題,需要的朋友可以參考下2019-11-11JavaScript實現(xiàn)簡單網(wǎng)頁版計算器
這篇文章主要介紹了JavaScript實現(xiàn)簡單網(wǎng)頁版計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08通過復(fù)制Table生成word和excel的javascript代碼
通過復(fù)制Table生成word和excel,個人感覺這個功能還是比較實用的,下面有個不錯的示例,希望對大家有所幫助2014-01-01uni-app多環(huán)境配置實現(xiàn)自動部署的方式詳解
前后端分離開發(fā)模式中,無論前后端都有可能區(qū)分不同的環(huán)境配置,下面這篇文章主要給大家介紹了關(guān)于uni-app多環(huán)境配置實現(xiàn)自動部署的相關(guān)資料,需要的朋友可以參考下2022-06-06微信小程序數(shù)據(jù)監(jiān)聽器使用實例詳解
這篇文章主要介紹了微信小程序數(shù)據(jù)監(jiān)聽器使用實例,數(shù)據(jù)監(jiān)聽器用于監(jiān)聽和響應(yīng)任何屬性和數(shù)據(jù)字段的變化,從而執(zhí)行特定的操作。它的作用類似于vue中的watch偵聽器2023-04-04JavaScript實現(xiàn)創(chuàng)建自定義對象的常用方式總結(jié)
這篇文章主要介紹了JavaScript實現(xiàn)創(chuàng)建自定義對象的常用方式,結(jié)合實例形式總結(jié)分析了JavaScript工廠模式、構(gòu)造函數(shù)模式、原型模式、組合模式等常用的自定義對象創(chuàng)建模式操作與使用技巧,需要的朋友可以參考下2018-07-07從0到1學(xué)習(xí)JavaScript編寫貪吃蛇游戲
這篇文章主要為大家詳細介紹了JavaScript編寫貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-07-07