2010-08-25 7 views
31

qu'est-ce que le code suivant dans le script de faire java:Que fait var x = x || {};

var x = x || {}; 
+0

Cette question est la plus ancienne, l'autre est un double. –

+0

Les expressions logiques en JavaScript sont évaluées de gauche à droite et sont testées pour une éventuelle évaluation "court-circuit" en utilisant les règles suivantes: false && (n'importe quoi) est évalué en court-circuit à faux. vrai || (n'importe quoi) court-circuit évalué à vrai. Dans l'exemple ci-dessus, si x est vrai, x devient la valeur assignée. Si x est faux ou indéfini, le second opérande devient l'assignation qui est {}. – tony

Répondre

7

Si x n'est pas défini (ou nul, ou toute autre valeur false), il devient un objet vide.

2

Affectez x à un nouvel objet vide s'il est null (undefined, false) ou conservez sa valeur existante sinon null.

40

|| est le OR logique.

L'expression

var x = x OR {}; 

devrait devenir plus évidente alors.

Si x a une valeur falsy (comme null, undefined, 0, ""), nous attribuons x un objet vide {}, sinon il suffit de garder la valeur actuelle. La version longue de ce ressemblerait

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

excellente réponse. Je suis un programmeur c et cela n'a pas de sens. – jakoh

+2

Si cela n'avait aucun sens pour vous, alors vous pourriez également faire attention à '!! value' qui renvoie un booléen représentant la véracité de' value', très pratique à certains moments. –

+0

Votre version longue est incorrecte: considérez le cas où x a déjà été défini et est défini sur 'null'. 'var x = x || {}; 'redéfinira x à un objet, alors que' var x = (typeof x! == 'undefined')? x: {}; 'ne le sera pas. Le paragraphe qui le précède est correct cependant. –

0

à moins que x est défini ou attribuer une valeur qu'il prendra objet vide comme valeur par défaut ..

qui est,

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

sortie doit être

10 

si la valeur x n'est pas affectée. la valeur de sortie doit être,

undefined 
-1

si var x est défini, alors ce sera la valeur définie. Sinon, il sera objet vide comme [object Object]

Par exemple, dans le bloc de code suivant, x sera 10:

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

Cependant, si:

var x = x || {}; 

alors x sera [object Object]

4

On ne devrait jamais écrire "var x = x || {};" en soi.

La seule circonstance où ceci n'est pas identique à "var x = {};" est quand x a été précédemment initialisé dans la même portée. C'est immoral. Note:

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

est le même que, simplement plus confuse que,

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

En aucun cas, est-il une référence à la valeur du symbole « x » dans la portée globale.

Cette expression est une variante confuse de l'idiome légitime d'initialisation de la propriété paresseuse:

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