(錯(cuò)誤處理)錯(cuò)誤傳播+異常錯(cuò)誤處理

  • 錯(cuò)誤分兩種秃流,一種是程序?qū)懙倪壿嫴粚?duì)赂蕴,導(dǎo)致代碼執(zhí)行異常。例如:
  • 一種是執(zhí)行過(guò)程中剔应,程序可能遇到無(wú)法預(yù)測(cè)的異常情況而報(bào)錯(cuò)睡腿,例如,網(wǎng)絡(luò)連接中斷峻贮,讀取不存在的文件席怪,沒(méi)有操作權(quán)限等。
var r1, r2, s = null;
try {
    r1 = s.length; // 此處應(yīng)產(chǎn)生錯(cuò)誤
    r2 = 100; // 該語(yǔ)句不會(huì)執(zhí)行
} catch (e) {
    console.log('出錯(cuò)了:' + e);
} finally {
    console.log('finally');
}
console.log('r1 = ' + r1); // r1應(yīng)為undefined
console.log('r2 = ' + r2); // r2應(yīng)為undefined

錯(cuò)誤類(lèi)型

JavaScript有一個(gè)標(biāo)準(zhǔn)的Error對(duì)象表示錯(cuò)誤纤控,還有從Error派生的TypeError挂捻、ReferenceError等錯(cuò)誤對(duì)象。我們?cè)谔幚礤e(cuò)誤時(shí)船万,可以通過(guò)catch(e)捕獲的變量e訪(fǎng)問(wèn)錯(cuò)誤對(duì)象:

try {
    ...
} catch (e) {
    if (e instanceof TypeError) {
        alert('Type error!');
    } else if (e instanceof Error) {
        alert(e.message);
    } else {
        alert('Error: ' + e);
    }
}

拋出錯(cuò)誤

程序也可以主動(dòng)拋出一個(gè)錯(cuò)誤刻撒,讓執(zhí)行流程直接跳轉(zhuǎn)到catch塊。拋出錯(cuò)誤使用throw語(yǔ)句耿导。

var r, n, s;
try {
    s = prompt('請(qǐng)輸入一個(gè)數(shù)字');
    n = parseInt(s);
    if (isNaN(n)) {
        throw new Error('輸入錯(cuò)誤');
    }
    // 計(jì)算平方:
    r = n * n;
    console.log(n + ' * ' + n + ' = ' + r);
} catch (e) {
    console.log('出錯(cuò)了:' + e);
}

錯(cuò)誤傳播

如果在一個(gè)函數(shù)內(nèi)部發(fā)生了錯(cuò)誤声怔,它自身沒(méi)有捕獲,錯(cuò)誤就會(huì)被拋到外層調(diào)用函數(shù)舱呻,如果外層函數(shù)也沒(méi)有捕獲醋火,該錯(cuò)誤會(huì)一直沿著函數(shù)調(diào)用鏈向上拋出悠汽,直到被JavaScript引擎捕獲,代碼終止執(zhí)行芥驳。

function main(s) {
    console.log('BEGIN main()');
    try {
        foo(s);
    } catch (e) {
        console.log('出錯(cuò)了:' + e);
    }
    console.log('END main()');
}

function foo(s) {
    console.log('BEGIN foo()');
    bar(s);
    console.log('END foo()');
}

function bar(s) {
    console.log('BEGIN bar()');
    console.log('length = ' + s.length);
    console.log('END bar()');
}

main(null);

當(dāng)bar()函數(shù)傳入?yún)?shù)null時(shí)柿冲,代碼會(huì)報(bào)錯(cuò),錯(cuò)誤會(huì)向上拋給調(diào)用方foo()函數(shù)兆旬,foo()函數(shù)沒(méi)有try ... catch語(yǔ)句假抄,所以錯(cuò)誤繼續(xù)向上拋給調(diào)用方main()函數(shù),main()函數(shù)有try ... catch語(yǔ)句丽猬,所以錯(cuò)誤最終在main()函數(shù)被處理了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宿饱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子脚祟,更是在濱河造成了極大的恐慌刑棵,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愚铡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡胡陪,警方通過(guò)查閱死者的電腦和手機(jī)沥寥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)柠座,“玉大人邑雅,你說(shuō)我怎么就攤上這事÷杈” “怎么了淮野?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)吹泡。 經(jīng)常有香客問(wèn)我骤星,道長(zhǎng),這世上最難降的妖魔是什么爆哑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任洞难,我火速辦了婚禮,結(jié)果婚禮上揭朝,老公的妹妹穿的比我還像新娘队贱。我一直安慰自己,他們只是感情好潭袱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布柱嫌。 她就那樣靜靜地躺著,像睡著了一般屯换。 火紅的嫁衣襯著肌膚如雪编丘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音瘪吏,去河邊找鬼癣防。 笑死,一個(gè)胖子當(dāng)著我的面吹牛掌眠,可吹牛的內(nèi)容都是我干的蕾盯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼蓝丙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼级遭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起渺尘,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挫鸽,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后鸥跟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體丢郊,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年医咨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了枫匾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡拟淮,死狀恐怖干茉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情很泊,我是刑警寧澤角虫,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站委造,受9級(jí)特大地震影響戳鹅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜昏兆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一粉楚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亮垫,春花似錦模软、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至继蜡,卻和暖如春回俐,著一層夾襖步出監(jiān)牢的瞬間逛腿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工仅颇, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留单默,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓忘瓦,卻偏偏與公主長(zhǎng)得像搁廓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子耕皮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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

  • Generator 函數(shù)的語(yǔ)法 簡(jiǎn)介 基本概念 Generator 函數(shù)是 ES6 提供的一種異步編程解決方案境蜕,語(yǔ)...
    站在大神的肩膀上看世界閱讀 4,170評(píng)論 0 6
  • 簡(jiǎn)介 基本概念 Generator函數(shù)是ES6提供的一種異步編程解決方案,語(yǔ)法行為與傳統(tǒng)函數(shù)完全不同凌停。Genera...
    oWSQo閱讀 513評(píng)論 0 2
  • 八粱年、深入理解java異常處理機(jī)制 引子try…catch…finally恐怕是大家再熟悉不過(guò)的語(yǔ)句了, 你的答案是...
    壹點(diǎn)零閱讀 1,560評(píng)論 0 0
  • 初識(shí)異常(Exception) 比如我們?cè)谌?shù)組里面的某個(gè)值得時(shí)候罚拟,經(jīng)常會(huì)出現(xiàn)定義的取值范圍超過(guò)了數(shù)組的大小台诗,那么...
    iDaniel閱讀 1,869評(píng)論 1 2
  • 一定浪費(fèi)自己的才能,我的洪荒之力一直想爆發(fā)的很
    Daisy_5998閱讀 136評(píng)論 0 0