2011-08-12 10 views
194

Sto controllando if(response[0].title !== undefined), ma ottengo l'errore:prova se qualcosa non è definito in JavaScript

Uncaught TypeError: Cannot read property 'title' of undefined.

+0

Vedere la risposta qui in StackOverflow. http://stackoverflow.com/questions/858181/how-to-check-a-not-defined-variable-in-javascript –

+0

possibile duplicato di [Javascript: undefined! == undefined?] (Http: // stackoverflow.com/questions/776950/javascript-undefined-undefined) –

risposta

301

response[0] non è definito, controllare se è definito e quindi controllare il titolo della proprietà.

if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){ 
    //Do something 
} 
+12

Nonostante il numero di voti, questo non è un buon modo per eseguire il controllo perché 'undefined' non è una parola chiave JavaScript (anche se tutti sembrano pensarlo). Se lo desideri, puoi creare una variabile chiamata 'undefined' e quindi questo controllo non sarà corretto. L'unico modo corretto è di controllare '(typeof myVar! == 'undefined')'. – BadHorsie

+3

@BadHorsie ha senso, ho aggiornato la risposta con il tuo commento. – amosrivera

0

Verificare se siete response[0] esiste in realtà, l'errore sembra suggerire non è così.

1

Sarà perché response[0] non è definito.

0

È necessario innanzitutto verificare se response[0] è indefinito, e solo se non lo è, controllare per il resto. Ciò significa che nel tuo caso, response[0] non è definito.

28

Basta controllare se response[0] è indefinito:

if(response[0] !== undefined) { ... } 

Se hai ancora bisogno di controllare in modo esplicito il titolo, farlo dopo il controllo iniziale:

if(response[0] !== undefined && response[0].title !== undefined){ ... } 
11

In realtà è necessario circondarla con una Prova/Blocca blocco in modo che il tuo codice non smetta di funzionare. Ti piace questa:

try{ 
    if(typeof response[0].title !== 'undefined') { 
     doSomething(); 
    } 
    }catch(e){ 
    console.log('responde[0].title is undefined'); 
    } 
+0

Stavo guardando IE 8 e avevo bisogno di fare un tentativo di cattura. – RonanOD

+1

questo è il modo migliore se si sta verificando se una funzione non è definita. – edepperson

+0

lanciare un errore per verificare undefined non è una buona soluzione. @amosrivera è la soluzione migliore. – user3658423

30

Ho avuto problemi con tutti gli altri esempi di codice di cui sopra. In Chrome, questa è stata la condizione che ha funzionato per me:

typeof possiblyUndefinedVariable !== "undefined" 

dovrò verificare che in altri browser e vedere come vanno le cose suppongo.

+2

Same - Ho trovato 'undefined' doveva essere una stringa. – remarsh

+0

questo deve essere qualcosa di nuovo con chrome (sono su win chrome 41 atm). la risposta accettata funzionava benissimo! : P – joe

8

typeof:

var foo; 
if (typeof foo == "undefined"){ 
    //do stuff 
} 
1

Controllare se condition == null; Risolverà il problema

+1

Questo dovrebbe essere un commento –

0

So che sono andato qui con 7 mesi di ritardo, ma ho trovato queste domande e sembra interessante. Ho provato questo sulla mia console del browser.

try{x,true}catch(e){false} 

Se la variabile x non è definito, l'errore viene catturato e sarà falso, in caso contrario, restituirà true. Quindi puoi utilizzare la funzione eval per impostare il valore su una variabile

var isxdefined = eval('try{x,true}catch(e){false}') 
Problemi correlati