risposta
Se x
è indefinito (o nullo, o qualsiasi altro valore false
), diventa un oggetto vuoto.
Assegnare x
a un nuovo oggetto vuoto se è null
(indefinito, falso) o mantenere il valore esistente se non è null
.
||
è 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 : {};
risposta eccellente. Sono un programmatore c e questo non ha alcun senso. – jakoh
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. –
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ò. –
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
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]
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";
}
- 1. Cosa fa l'intestazione X-SourceFiles?
- 2. Cosa fa x >>> 0?
- 3. cosa fa x: Key = "{x: Type TextBox}" fare?
- 4. Cosa fa il Prolog se si X = f (X)?
- 5. Cosa fa se [ "x"! = X] fare in bash?
- 6. Cosa fa l'intestazione X-Backside-Transport?
- 7. Cosa fa la lista [x :: y]?
- 8. Quando dovrei usare questo.x vs var x?
- 9. Qual è la differenza tra "var $ x" e "var x" in javascript?
- 10. Cosa significa: chiave = lambda x: x [1]?
- 11. Codice strano in sorgenti jQuery: var! == var? x: y;
- 12. var x = x || "Val default" non sempre impostato correttamente se x è definito sopra di esso
- 13. Cosa fa (int) (unsigned char) (x) do in C?
- 14. Cosa diavolo fa std :: bind (x, y) do?
- 15. Cosa fa la parola chiave PHP 'var'?
- 16. Che cosa fa {% capture var%} in jekyll?
- 17. fa% x [] cattura tutto l'output?
- 18. Cosa significa x [x <2] = 0 in Python?
- 19. `X x = x = X();` legale C++?
- 20. riga, = trama (x, sin (x)) cosa significa virgola?
- 21. F # - cosa combacia ... con | :? X come x significa?
- 22. Cosa significa "$ {x %% *}" in sh?
- 23. Che cosa significa x = x (:) significa in MATLAB, dove x è un vettore?
- 24. Filtro "x giorni fa" in Django?
- 25. Far cadere del tutto X fa male?
- 26. Data relativa Bash (x giorni fa)
- 27. python 'x giorni fa' a datetime
- 28. Perché x ++ - + - ++ x legale ma x +++ - +++ x non lo è?
- 29. Perché x ** 3 è più lento di x * x * x?
- 30. std :: string x (x);
Questa domanda è il più vecchio, l'altro è un duplicato. –
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