2011-08-22 75 views
22

當我用JavaScript開發普通的Web應用程序時,通常不需要try/catch聲明。沒有checked exception,JavaScript中的文件IO或數據庫連接。什麼時候應該在JavaScript中使用try/catch?

try/catch聲明在JavaScript中有用嗎?我什麼時候可以使用它?

+0

'JavaScript中沒有文件IO或數據庫連接。' Node.js實際上支持這些,儘管它不要求你使用'try/catch'。 – pimvdb

回答

8

只要您正在運行的代碼可能會引發異常,請使用它。請記住,你可以throw你自己的錯誤 - 我使用的大部分try…catch東西是爲了捕捉我自己的例外。

19

try...catch塊通常鼓勵使用較少,這不取決於您使用的語言。

主要原因是catch塊的成本。另外一個原因是,當你用單個try...catch塊封裝很多語句時,在catch塊中,您無法確定究竟是什麼主要問題。

最好使用像validationif...else塊這樣的技術來減少發生異常(錯誤)的可能性。例如,當你想這是從用戶考慮,而不是使用try...catch,多項工作,你可以使用:

if (isNaN(numberVariable)) 
{ 
    alert('you should enter a valid number'); 
} 
4

外部JavaScript庫和小部件經常使用的異常實例化的錯誤。這是常見的需要:

try { 
    var w = new Widget(); 
} 
catch (e) { 
    // widget failed 
} 
1

嗯,我個人(誤?)使用它,當我寫一些代碼,我不知道會正確執行,但用戶並不需要了解錯誤。

除此之外,我一直在使用它的一些用戶控件,對此你可以定義你的HTML標記的「動作」屬性,以及JavaScript將嘗試執行該行動,像這樣:

​​

(我喜歡把它比eval()的xD更好)

13

一種情況我發現的try/catch /終於有用的是具有深度嵌套的對象,其中空可以在任何級別彈出。例如,考慮一下:

var something = one.two.three.four.five; 

執行此「得到」與100%的安全一個會寫一點冗長的代碼:

if(one && one.two && one.two.three && one.two.three.four) 
    something = one.two.three.four.five; 

現在想象的變量名是現實的,較長如果聲明你很快就會得到一個非常難看的代碼。

我傾向於使用的try/catch /終於來簡化這個時候我不關心任何「其他」的情況,只是希望對象與否:

var something; 
try { something = one.two.three.four.five; } 
catch { something = "default"; } 
finally { doSomething(something); } 
13

我發現這個從post here

什麼時候應該使用try-catch?

的try-catch語句應使用要對用戶隱藏,或者你想製作自定義錯誤爲用戶的利益任何時候錯誤的任何時間。如果你還沒有弄明白,當你執行try-catch語句時,瀏覽器通常的錯誤處理機制將被禁用。

在構建大型應用程序時,您可能會看到可能帶來的好處。在任何應用程序的流程中調試每種可能的情況往往都很耗時,並且很多可能性可能會被忽略。當然,通過適當的錯誤測試,不應忽視任何區域。但是try-catch語句在你的代碼領域可以很好的回退,在開發過程中無法預見的異常情況下可能會失敗。

try-catch語句提供的另一個好處是它隱藏了不理解它們的用戶的技術性錯誤消息。

使用try-catch的最佳時機是在您懷疑會出現無法控制的錯誤的部分代碼中,無論出於何種原因。

什麼時候應該試着避免?

,如果你知道錯誤是將要發生,因爲在這種情況下,你將要調試的問題,不能掩蓋它你不應該使用try-catch語句。 try-catch語句只能在懷疑可能發生錯誤的代碼段落執行,並且由於可能的情況數量過多,您無法完全驗證是否會發生錯誤,或者何時會發生錯誤。在後一種情況下,使用try-catch應該是合適的。

相關問題