2009-06-30 1 views
10

Ho il codice che è racchiuso nel blocco try/catch. Io uso typeof per scoprire se una variabile è definita:Javascript se typeof = 'undefined' in try/catch space

if (typeof (var) == 'string') { 
    //the string is defined 
} 

Tuttavia, utilizzando questo in un blocco try/catch, salta alla parte cattura invece di fare ciò che è suppoed fare (fare qualcosa con la stringa se è definita).

Come posso verificare se una variabile è definita senza attivare un'eccezione?

+1

sembra di avere un problema diverso da quello che si pensa di fare - inviare più codice – annakata

+0

Grazie eveyone per la risposta! La mia var era un elemento dell'array. questa era la ragione. Ho definito l'array (come array vuoto) e ora funziona. L'eccezione è stata licenziata perché l'array non esisteva. – Nir

+0

Un punto: 'typeof' è un operatore, non una funzione. Non hai bisogno di parentesi intorno all'operando. * [Questo è migrato dalla mia risposta in quanto non è una risposta; Credo di non aver avuto un rappresentante insufficiente per pubblicare un commento all'ora] * –

risposta

14

"var" non è un nome di variabile valido, è una parola chiave.

Oltre a ciò, ciò che si dovrebbe dovrebbe essere corretto.

+0

Grazie! per favore vedi il mio commento sopra – Nir

0

userei un confronto diretto, senza 'typeof':

var vvv= 2; 
alert(vvv !== undefined); 

Attenzione, però, per sapere se si desidera verificare la presenza di truliness (non falsa, null, undefined, "" o 0), contro null, undefined, false o una combinazione di questi.

Se si desidera semplicemente vedere che il valore ha un valore, il codice che ho inserito sopra dovrebbe fare.

Come suggerimento, ho trovato questo libro tremenda: JavaScript - the Good Parts

+0

Grazie! per favore vedi il mio commento sopra – Nir

+6

var vvv = 2; alert (vvv! == undefined); non funziona in tutti i casi. In primo luogo, provalo senza la prima riga e ottieni subito un errore perché vvv non è stato dichiarato. In secondo luogo, e questo non è niente di altrettanto importante, il "non definito" sul lato destro del confronto è una proprietà dell'oggetto globale che può essere riassegnata e non è nemmeno presente in alcuni browser (ad esempio IE 5) . Quindi il miglior test per una variabile v definita è: if (typeof v! == "undefined") { ... } –