2010-11-16 15 views
5

Mi viene un errore bizzarro in Chrome ... controlla lo screenshot qui sotto.Impossibile impostare la proprietà ... di undefined --- bizzarro

Definisco il record utilizzando la sintassi letterale dell'oggetto.

Provo a impostare la proprietà "id" e ottenere l'eccezione.

Ho provato sia:

record['id'] = 'wtf'; 

e anche

record.id = 'wtf'; 

Io uso questo tipo di sintassi di tutto il luogo nel mio script .... quello che potrebbe essere succedendo qui? Si tratta di un bug in Chrome?

alt text

EDIT: Ho risolto il problema per ora, ma io non sono ancora sicuro perché questo sta accadendo. Ho spostato la definizione del record in modo che si verifichi al di fuori del blocco if. Qualcuno sa cosa potrebbe accadere? Ho pensato che tutte le dichiarazioni delle variabili fossero mirate alla funzione e quindi questo non dovrebbe essere un problema.

+0

Non riesco a riprodurre l'errore (su Chrome 7 e Firefox su Mac). Dalle informazioni qui e dalla schermata, sembra che non ci sia nulla di sbagliato nel tuo codice. Qual è il valore di 'record' proprio prima della linea" errata "? – nickf

risposta

15

Il problema è molto probabile che dl sia minore o uguale a zero, quindi l'istruzione che inizializza record non viene eseguita. Dal tuo rientro, sembra che tu abbia inteso che entrambe le istruzioni siano parte del blocco if, ma senza parentesi, l'istruzione record['id'] = 'wtf'; viene eseguita indipendentemente da cosa.

Spostando l'inizializzazione della variabile all'esterno dell'istruzione if, l'hai forzata ad accadere in ogni caso e spostato il compito all'interno del blocco if (che, presumo sia ciò che volevi).

Probabilmente un modo migliore per risolverlo è l'aggiunta di parentesi graffe in questo modo:

if (dl > 0) { 
    var record = {}; 

    record.id = 'wtf'; 
} 

A meno che davvero si desidera inizializzare record in entrambi i casi.

Lei ha ragione su variabili dichiarazioni essere ambito alla funzione, ma il assegnazione non accade fino a quando si arriva a quel punto del codice. record era in ambito, ma aveva ancora il suo valore predefinito di undefined perché non gli era ancora stato assegnato nulla.

+0

Wow. Alcuni bug sono autoinflitti. Bella presa ! – rvandervort

0

Funziona per me, nessun motivo non dovrebbe funzionare. Sei sicuro che si riferisca a quella linea esatta? cosa succede se si alert(record) prima di impostarlo? Hai già provato a eseguire il debug?

+0

In realtà, penso di aver risolto il problema proprio ora ... ma ancora non sono sicuro del motivo per cui questo sta accadendo. Ho spostato la definizione di record al di fuori del blocco if e sembra funzionare ... aggiornerò la domanda principale. – rvandervort

+0

@rvandervort: se scopri la causa, assicurati di condividere il motivo! – nickf

Problemi correlati