2011-08-22 31 views
22

Quando sviluppo una normale applicazione Web con JavaScript, l'istruzione try/catch non è necessaria in genere. Non c'è checked exception, File IO o connessione al database in JavaScript.Quando dovresti usare try/catch in JavaScript?

È la dichiarazione try/catch utile in JavaScript? Quando posso usarlo?

+0

'Nessun collegamento file IO o database in JavaScript.' Node.js infatti supporta quelli, anche se non richiede l'uso di 'try/catch'. – pimvdb

risposta

8

Utilizzarlo quando il codice in esecuzione potrebbe generare un'eccezione. Ricordati che puoi correggere i tuoi errori throw - la maggior parte delle cose che uso io sono per le mie eccezioni.

19

try...catch I blocchi sono generalmente consigliati per essere utilizzati meno, e questo non dipende dalla lingua che si utilizza.

Il motivo principale di ciò è il costo dei blocchi catch. Un altro motivo è che, quando imposti molte istruzioni con un singolo blocco try...catch, nel blocco catch non puoi essere sicuro di quale fosse esattamente il problema principale.

È preferibile utilizzare tecniche come o if...else per ridurre la probabilità che si verifichi un'eccezione (errore). Ad esempio, quando si desidera lavorare con un numero che è tratto da utente, invece di usare try...catch, è possibile utilizzare:

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

librerie e widget JavaScript esterno spesso fanno uso di eccezioni per gli errori dell'istanza. E 'comune ad avere bisogno di:

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

Beh, io personalmente (mis?) Lo usano, quando scrivo un po' di codice che non sono sicuro che verrà eseguito correttamente, ma l'utente non ha bisogno di conoscere la errore.

Oltre a questo, ho usato su alcuni controlli utente, a cui è possibile definire una proprietà 'azione' nel markup HTML e il codice JavaScript cercherò l'esecuzione di tale azione, in questo modo:

try{ 
    window['method'](args); 
}catch(e){ 
    try{ 
     window['optionalExceptionHandler'](e, args); 
    }catch(e){ return; } 
} 

(mi piace pensare che sia meglio di eval() xD)

13

uno scenario trovo try/catch/finally utile è con oggetti profondamente nidificate, dove un nulla può apparire a qualsiasi livello. per esempio, si consideri questo:

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

per eseguire questa "get" con il 100% di sicurezza si dovrebbe scrivere un po 'di codice verbose:

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

Ora immaginate i nomi delle variabili sono realistici e più a lungo e si ottiene rapidamente un codice molto brutto in caso di affermazione.

Io tendo ad usare try/catch/finally per semplificare questo quando non mi importa di eventuali scenari di "else" e vogliono solo l'oggetto o no:

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

ho trovato questo da un post here:

Quando si deve utilizzare try-catch?

L'istruzione try-catch dovrebbe essere usato ogni volta che si desidera nascondere gli errori da parte dell'utente, o ogni volta che si desidera produrre errori personalizzati a beneficio degli utenti. Se non l'hai ancora capito, quando esegui una dichiarazione try-catch, il solito meccanismo di gestione degli errori del browser sarà disabilitato.

Probabilmente è possibile vedere i possibili benefici a questo quando si costruiscono applicazioni di grandi dimensioni. Il debugging di ogni possibile circostanza nel flusso di un'applicazione spesso richiede tempo e molte possibilità potrebbero essere ignorate inavvertitamente. Ovviamente, con un corretto bug test, nessuna area dovrebbe essere trascurata. Ma la dichiarazione try-catch funziona come un bel ripiego in aree del tuo codice che potrebbero fallire in circostanze insolite che non erano previste durante lo sviluppo.

Un altro vantaggio fornito dall'istruzione try-catch è che nasconde messaggi di errore eccessivamente tecnici da parte degli utenti che non li capirebbero comunque.

Il momento migliore per utilizzare try-catch è in porzioni del codice in cui si sospetta che si verifichino errori al di fuori del proprio controllo, per qualsiasi motivo.

Quando deve essere tentata la cattura?

Si consiglia di non utilizzare l'istruzione try-catch, se si conosce un errore che sta per accadere, perché in questo caso si vorrebbe eseguire il debug del problema, non mascherarlo. La dichiarazione try-catch deve essere eseguita solo su sezioni di codice in cui si sospetta che potrebbero verificarsi degli errori e, a causa del numero esagerato di circostanze possibili, non è possibile verificare completamente se si verificherà un errore o quando lo farà. In quest'ultimo caso, sarebbe opportuno utilizzare try-catch.

Problemi correlati