2010-08-25 17 views
31

qué hace el siguiente código en java script:¿Qué var var = x || {};

var x = x || {}; 
+0

Esta pregunta es el más viejo, el otro es un duplicado. –

+0

Las expresiones lógicas en JavaScript se evalúan de izquierda a derecha y se prueban para una posible evaluación de "cortocircuito" utilizando las siguientes reglas: false && (cualquier cosa) se evalúa en cortocircuito como falsa. verdadero || (cualquier cosa) es un cortocircuito evaluado como verdadero. En el ejemplo anterior, si x es verdadero, x se convierte en el valor asignado. Si x es falso o indefinido, el segundo operando se convierte en la asignación que es {}. – tony

Respuesta

7

Si x no está definida (o nula, o cualquier otro valor false), se convierte en un objeto vacío.

2

Asigne x a un nuevo objeto vacío si es null (undefined, false) o mantenga su valor existente si no es null.

40

|| es el OR lógico.

La expresión

var x = x OR {}; 

debería ser más obvio entonces.

Si x tiene un valor Falsy (como null, undefined, 0, ""), asignamos x un objeto vacío {}, de lo contrario sólo mantener el valor actual. La versión larga de esta vería como

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

excelente respuesta. Soy un programador de c y esto no tiene sentido. – jakoh

+2

Si esto no tiene sentido para usted, entonces también debe tener cuidado con '!! value' que devuelve un valor booleano que representa la veracidad de' value', muy útil a veces. –

+0

Su versión larga es incorrecta: considere el caso cuando x ha definido previamente y está establecido en 'nulo'. 'var x = x || {}; 'redefinirá x a un objeto, mientras que' var x = (typeof x! == 'undefined')? x: {}; 'no. El párrafo que lo precede es correcto sin embargo. –

0

menos que x se define o se le asigna un valor que tomará objeto vacío como valor por defecto ..

que es,

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

salida debe ser

10 

si x valor no asignado. el valor de salida debe ser,

undefined 
-1

si se define var x entonces será ese valor definido. De lo contrario será objeto vacío como [object Object]

Por ejemplo, en el siguiente bloque de código, x será 10:

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

Sin embargo, si:

var x = x || {}; 

entonces x habrá [object Object]

4

Uno nunca debe escribir "var x = x || {};" per se.

La única circunstancia en la que esto no es idéntico a "var x = {};" es cuando x se inicializó previamente en el mismo ámbito. Eso es inmoral Nota:

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

es el mismo que, meramente más confuso que,

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

En ninguno de los casos se hace referencia alguna al valor del símbolo "x" en el ámbito global.

Esta expresión es una variante confusa de la legítima expresión idiomática inicialización perezosa propiedad:

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