面向?qū)ο?1-異常處理

異常處理:try....catch

js代碼執(zhí)行特點(diǎn):從上向下執(zhí)行烦衣,在執(zhí)行的過程中如果出現(xiàn)了錯誤或者異常讥此,那么就直接報錯或拋出了異常兔甘。只要出錯,那么后面的代碼就不會再被執(zhí)行卤恳。

try{
    //這里寫可能出現(xiàn)異常的代碼
}catch(e){
    //這里的e就是捕獲的異常對象
    //可以在這里寫累盗,出現(xiàn)異常后的處理代碼
}

異常捕獲語句執(zhí)行的過程為:

01 代碼正常運(yùn)行, 如果在try中出現(xiàn)了錯誤, try 里面出現(xiàn)錯誤的語句后面的代碼都不再執(zhí)行, 直接跳轉(zhuǎn)到 catch 中

02 在catch中處理錯誤信息

03 繼續(xù)執(zhí)行后面的代碼

04 如果 try 中沒有出現(xiàn)錯誤, 那么不走 catch 直接執(zhí)行后面的代碼

捕獲異常的優(yōu)點(diǎn):通過try-catch語句進(jìn)行異常捕獲之后,代碼將會繼續(xù)執(zhí)行纬黎,而不會中斷幅骄。

注意:語法錯誤異常用try-catch語句無法捕獲劫窒,因?yàn)樵陬A(yù)解析階段本今,語法錯誤會直接檢測出來,而不會等到運(yùn)行的時候才報錯主巍。

try..catch使用示例


    //01 try ... catch結(jié)構(gòu)的使用
    //a();  若直接調(diào)用則爆出:Uncaught ReferenceError: a is not defined錯誤
    //在開發(fā)中,我們對于可能會報錯或者是發(fā)生異常的代碼用try結(jié)構(gòu)進(jìn)行處理

    try{
        a();    //如果發(fā)生異常,那么至少不會到正程序中斷
    }
    catch(e)
    {
        //如果try語句中發(fā)生了異常,那么會執(zhí)行此處的代碼塊
        //參數(shù)e.為具體的異常信息,可以打印進(jìn)行查看
        console.log(e);
    }

    function functionTest() {
        console.log("functionTest");
    };
    functionTest();
    

    //結(jié)論:使用try...catch結(jié)構(gòu),如果發(fā)生了異常,那么不會影響后面代碼的執(zhí)行,且我們可以在發(fā)生異常信息之后做出具體的處理

手動拋出異常

案例:自己寫的一個函數(shù)冠息,需要一個參數(shù),如果用戶不傳參數(shù)孕索,此時想直接給用戶拋出異常逛艰,就需要了解如何拋出異常。

拋出異常使用throw關(guān)鍵字搞旭,語法如下:

手動拋出異常信息(字符串)

    try{
        //a();    //如果發(fā)生異常,那么至少不會到正程序中斷

        //不使用系統(tǒng)默認(rèn)的異常信息,嘗試手動拋出
        throw "對不起,您調(diào)用了尚未定義的方法";
    }
    catch(e)
    {
        //如果try語句中發(fā)生了異常,那么會執(zhí)行此處的代碼塊
        //參數(shù)e.為具體的異常信息,可以打印進(jìn)行查看
        console.log(e);
    }

    function functionTest() {
        console.log("functionTest");
    };
    functionTest();

手動拋出異常信息(對象)


    try{
        //a();    //如果發(fā)生異常,那么至少不會到正程序中斷

        //不使用系統(tǒng)默認(rèn)的異常信息,嘗試手動拋出
        throw {
            errMsg:"具體的錯誤信息提示",
            errCode:"指定錯誤類型的代號,如1001等"
        };
    }
    catch(e)
    {
        //如果try語句中發(fā)生了異常,那么會執(zhí)行此處的代碼塊
        //參數(shù)e.為具體的異常信息,可以打印進(jìn)行查看
        console.log(e);

        //在try語句中拋出的錯誤信息是什么,那么得到的異常信息就是什么
        //如果拋出的是字符串,那么得到的就是字符串
        //如果拋出的是對象,那么此處得到的就是對象
        console.log(e.errMsg);
        console.log(e.errCode);
    }

    function functionTest() {
        console.log("functionTest");
    };
    functionTest();

異常捕獲語句的完整模式

異常捕獲語句的完整模式為try-catch-finally

    try{
        //在執(zhí)行的時候可能發(fā)生異常的代碼
        b();
    }
    catch (e)
    {
        //如果try代碼塊中的代碼在執(zhí)行中發(fā)生了異常,那么就會執(zhí)行該代碼塊的代碼
        //通過打印e對象可以查看具體的異常信息
        console.log(e); //打印異常信息
    }
    finally {
        //不論try語句中的代碼是否會發(fā)生異常,都一定會執(zhí)行此處的代碼塊
        //一般在前端開發(fā)中很少使用,常用語后臺開發(fā)的資源釋放工作
        console.log("無論如何總要執(zhí)行的代碼");
    }

finally中的代碼散怖,不管是否發(fā)生異常,都會執(zhí)行肄渗。一般用在后端語言中镇眷,用來釋放資源,JavaScript中很少會用到翎嫡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末欠动,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌具伍,老刑警劉巖翅雏,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異人芽,居然都是意外死亡望几,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進(jìn)店門萤厅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來橄妆,“玉大人,你說我怎么就攤上這事祈坠『δ耄” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵赦拘,是天一觀的道長慌随。 經(jīng)常有香客問我,道長躺同,這世上最難降的妖魔是什么阁猜? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮蹋艺,結(jié)果婚禮上剃袍,老公的妹妹穿的比我還像新娘。我一直安慰自己捎谨,他們只是感情好民效,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著涛救,像睡著了一般畏邢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上检吆,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天舒萎,我揣著相機(jī)與錄音,去河邊找鬼蹭沛。 笑死臂寝,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的摊灭。 我是一名探鬼主播咆贬,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼斟或!你這毒婦竟也來了素征?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎御毅,沒想到半個月后根欧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡端蛆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年凤粗,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片今豆。...
    茶點(diǎn)故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡嫌拣,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出呆躲,到底是詐尸還是另有隱情异逐,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布插掂,位于F島的核電站灰瞻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏辅甥。R本人自食惡果不足惜酝润,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望璃弄。 院中可真熱鬧要销,春花似錦、人聲如沸夏块。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拨扶。三九已至凳鬓,卻和暖如春茁肠,著一層夾襖步出監(jiān)牢的瞬間患民,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工垦梆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留匹颤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓托猩,卻偏偏與公主長得像印蓖,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子京腥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Java異常類型 所有異常類型都是Throwable的子類赦肃,Throwable把異常分成兩個不同分支的子類Erro...
    予別她閱讀 928評論 0 2
  • 初識異常(Exception) 比如我們在取數(shù)組里面的某個值得時候,經(jīng)常會出現(xiàn)定義的取值范圍超過了數(shù)組的大小,那么...
    iDaniel閱讀 1,870評論 1 2
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法他宛,類相關(guān)的語法船侧,內(nèi)部類的語法,繼承相關(guān)的語法厅各,異常的語法镜撩,線程的語...
    子非魚_t_閱讀 31,638評論 18 399
  • 病毒式內(nèi)容的特點(diǎn) 病毒式內(nèi)容都有幾個特點(diǎn),他們貼近生活队塘,屬于原創(chuàng)袁梗,如果能夠生在其中一起參與進(jìn)來, 那么就能夠得到有...
    Mia120709閱讀 563評論 0 2
  • 沒有理由的喜歡
    不泊閱讀 241評論 0 1