2013-04-22 10 views
9

Sembra che il indefinita è una struttura di finestra/globale:Non è definita una proprietà di window/global?

enter image description here

Ho sempre pensato che indefinita è, come nulla, un valore uniqe in JavaScript.

Ma il codice sopra (testato in Chrome) mi confonde.

qualcuno può spiegare il motivo per cui

undefined in window 

evalute true, mentre

null in window 

valutare a false

+0

rilevante:/questions/776950/javascript-undefined-undefined –

risposta

12

Non solo undefined, ma anche Infinity e NaN sono valori del global object, in questo caso, window (a partire da ES5.1 specification).

Il fatto non è possibile assegnare un valore a undefined è perché la proprietà è definita con l'writableattribute insieme a false.

null è una primitive value (come è 5) del typeNull (come è Number per 5), non una proprietà di window.

Dai uno sguardo allo annotated ES5 specification per ulteriori informazioni su questo, è abbastanza leggibile!

+2

In realtà, prima di ES5, è possibile assegnare a "undefined". Non dovresti, ma puoi. E infatti c'è un codice in jQuery che cerca di ottenere il vero non definito nel caso qualcuno assegni cose a undefined. – slebetman

+1

Esiste un valore 'non definito 'incorporato, che' accade essere 'usato come valore della proprietà' window.undefined' (è specificato come 'indefinito', ma in alcune implementazioni può essere riassegnato). Metodi molto affidabili per ottenere il valore 'undefined' includono' void 0', '(function() {}())' e 'var undef;'. Raccomando 'var undef = void 0;' usato all'interno di un ambito del modello di modulo. – Keen

Problemi correlati