2010-08-25 16 views
31

cosa il seguente codice fare java script:Cosa fa var x = x || {};

var x = x || {}; 
+0

Questa domanda è il più vecchio, l'altro è un duplicato. –

+0

Le espressioni logiche in JavaScript vengono valutate da sinistra a destra e vengono testate per la possibile valutazione "cortocircuito" utilizzando le seguenti regole: falso && (qualsiasi cosa) viene valutato in cortocircuito su falso. vero || (qualsiasi cosa) è il corto circuito valutato come vero. Nell'esempio sopra, se x è vero, x diventa il valore assegnato. Se x è falso o non definito, il secondo operando diventa l'assegnazione che è {}. – tony

risposta

7

Se x è indefinito (o nullo, o qualsiasi altro valore false), diventa un oggetto vuoto.

2

Assegnare x a un nuovo oggetto vuoto se è null (indefinito, falso) o mantenere il valore esistente se non è null.

40

|| è il OR logico.

L'espressione

var x = x OR {}; 

dovrebbe diventare più evidente allora.

Se x ha un valore falsy (come null, undefined, 0, ""), abbiamo assegnare x un oggetto vuoto {}, altrimenti solo mantenere il valore corrente. La versione lunga di questo sarebbe assomigliare

var x = x ? x : {}; 
+1

risposta eccellente. Sono un programmatore c e questo non ha alcun senso. – jakoh

+2

Se questo non ha senso per te, allora potresti anche prestare attenzione a '!! value' che restituisce un valore booleano che rappresenta la veridicità di' value', a volte molto utile. –

+0

La tua versione lunga non è corretta: considera il caso in cui x è stato precedentemente definito ed è impostato su 'null'. 'var x = x || {}; 'ridefinirà x in un oggetto, mentre' var x = (typeof x! == 'undefined')? x: {}; 'no. Il paragrafo che lo precede è corretto però. –

0

meno che x è definita o assegnato un valore ci vorrà oggetto vuoto come valore di default ..

che è,

for example 
x = 10 
var x = x || {}; 

uscita deve essere

10 

se x valore non assegnato. il valore di uscita deve essere,

undefined 
-1

se var x è definito, sarà il valore definito. Altrimenti sarà oggetto vuoto come [object Object]

Ad esempio, nel seguente blocco di codice, x sarà 10:

var x = 10; 
x = x || {} 

Tuttavia, se:

var x = x || {}; 

poi x sarà [object Object]

4

Non si dovrebbe mai scrivere "var x = x || {};" di per sé.

L'unica circostanza in cui non è identica a "var x = {};" è quando x è stato precedentemente inizializzato nello stesso ambito. Questo è immorale. Nota:

function() { 
    x = {foo:"bar"}; 
    var x = x || {}; 
} 

è lo stesso, solo più confuso di,

function() { 
    var x = {foo:"bar"}; 
    x = x || {}; 
} 

In entrambi i casi c'è alcun riferimento al valore del simbolo "x" in ambito globale.

questa espressione è una variante confusa del legittimo pigro linguaggio di inizializzazione proprietà:

function(foo) { 
    foo.x = foo.x || {}; 
    foo.x.y = "something"; 
}