Se a
è indefinito, questo funziona:Qual è la differenza tra undefined e window.undefined in JavaScript?
if(window.a) {}
mentre questo genera un errore:
if(a)
Qualcuno può spiegare perché?
Se a
è indefinito, questo funziona:Qual è la differenza tra undefined e window.undefined in JavaScript?
if(window.a) {}
mentre questo genera un errore:
if(a)
Qualcuno può spiegare perché?
window.a
è una proprietà di window
ed è undefined. a
è una variabile ed è non dichiarata.
Per utilizzare una variabile, è necessario prima dichiararla utilizzando l'istruzione var
. Poiché non hai dichiarato a
, l'interprete genera un errore. Le proprietà dell'oggetto non sono necessarie per essere esplicitamente dichiarate per poterle utilizzare. Crockford scrive in le parti buone:
If you attempt to extract a value from an object, and if the object does not have a member with that name, it returns the undefined value instead.
Tuttavia: "window.a = 2; a" - Non è necessario alcun 'var'. Succede solo che l'eccezione è generata quando una ricerca di identificatori "non prefissati" finisce fuori dagli ambiti concatenati per cercare dentro. L'ultimo contesto controllato è il contesto globale (o "finestra"). Per la maggior parte degli scopi pratici, 'var x' nel contesto globale è uguale a 'window.x = undefined'. Vedi http://jibbering.com/faq/faq_notes/closures.html e guarda "Risoluzione dell'identificatore, contesti di esecuzione e catene dell'oscilloscopio". –
@pst: questo è un caso speciale nei browser che tutte le variabili globali sono proprietà di 'window'. È un problema indipendente di JavaScript. Se esegui 'window.a = 2; a' in Rhino, che è un ambiente non browser, si ottiene comunque l'errore di riferimento. –
@pst: comunque, grazie per il vostro supplemento nel chiarire la risposta. –
Si prega di spiegare in dettaglio. – Salil