首頁  >  文章  >  web前端  >  理解javascript中try...catch...finally_javascript技巧

理解javascript中try...catch...finally_javascript技巧

WBOY
WBOY原創
2016-05-16 15:23:381244瀏覽

本文為大家分析了javascript中try...catch...finally的使用方法,分享給大家供大家參考,具體內容如下

稍微複雜一點點,就要用到判斷語句,if else進行條件判斷,話說if條件else否則,這樣的判斷對於寫程式碼的碼儂已經是非常熟悉不過了。

如果你覺得這個也很簡單,可能會用到混合if else條件判斷語句加上try catch 來處理語句,雖然用try catch能處理任何的對象,通過throw扔一條有錯誤的語句,接著catch拋出該物件或該物件的錯誤,今天我們只說try...catch,下面的例子分別拋出數組、時間、原型函數、數字類型等。

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內放一條可能產生錯誤的語句。當try語句開始執行並拋出錯誤時,catch才執行內部的語句和對應的try內的錯誤訊息message。何時執行finally語句,只有當try語句和catch語句執行之後,才執行finally語句,不論try拋出異常或catch捕獲都會執行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輸出的結果是: // 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捕捉到錯誤輸出結果同上finally。 // err finally  // new finally。

當我修改try的語句:

function trycatch () {
  try{
    // 
  }
  catch(e){
    console.log('err finally');
    return console.log('new finally')
  }
}
trycatch ()
// 空(viod)
// 空(viod)

結果就輸出都為空。 // 空(viod)。因為try沒有丟出錯誤,所以catch沒有捕捉到異常,故輸出結果就為空。

那麼我們再看看下面這個案例,透過下面的例子,可能會讓你更了解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

當我們在try可能引發錯誤的程式碼區塊內嵌套try catch,透過嵌套的程式碼區塊try內丟一條可能出現錯誤的語句throw new Error('open');,緊接著嵌套的try將錯誤傳遞給嵌套的catch處理,最終通過嵌套的finally運行過後,我們看到最後一條結果// op open,其實嵌套的catch捕獲的錯誤信息扔給最外層catch捕獲的。 // op open

也就是說:任何給定的異常只會被離它最近的封閉catch塊捕獲一次。

當然,在「內部」區塊拋出的任何新異常(因為catch區塊裡的程式碼也可以拋出異常),都會被「外部」區塊所捕獲。

以上就是本文的全部內容,希望對大家學習javascript程式設計有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn