2011-08-19 14 views
17
operador

A veces veo en el código Javascript o menos así:Objeto init en javascript usando ||

var myObj = myObj || {}; 

Por lo tanto, lo que realmente sucede aquí? Supongo || el operador devuelve verdadero o falso, pero no es correcto.

Respuesta

25

El operador || devuelve el operando izquierdo si se evalúa como verdadero; de lo contrario, evalúa y devuelve el operando correcto. En otras palabras, a || b es equivalente a a ? a : b, excepto que a solo se evalúa una vez.

+1

+1 también llamado * nulo coalescente operador * en JavaScript http://stackoverflow.com/questions/476436/null-coalescing-operator-for-javascript/476445#476445 – naveen

+1

No, solo se puede utilizar como * reemplazo * para el operador coalescente nulo de C# ('??'). :) Nunca escuché '||' llamado el "operador coalescente nulo"; siempre ha sido el operador "lógico o". – cdhowie

+0

de acuerdo. de las preguntas anteriores de OP es de fondo ASP.NET y por eso esta aclaración. – naveen

2

Esto inicializa myObj a menos que ya esté definido.

1

|| es un operador de cortocircuito. Si el primer operando se evalúa como verdadero, el segundo no se evalúa.

Así JS a || b es algo así como C# a ?? b

0

si myObj no está definido o nula entonces evalúa la expresión en el lado derecho de || que crea un nuevo objeto vacío

por lo myObj es o bien myObj si no es nulo o vacío si un objeto es nulo myObj

espero que entienda lo que quiero decir

+1

También si el valor de 'myObj' era falso o 0 o NaN o la cadena vacía, también causará que a la variable se le asigne un nuevo objeto. No es ** solo ** indefinido o nulo. Hay 6 cosas falsas en JavaScript. –

+0

@Ray Toal: gracias por la adición – Fender

1

La o op (||) se devuelve el primer parámetro no vacío/falso.

En el caso especificado, si myObj es falsa o nula, que se establecerá en un objeto vacío (las llaves {} se utilizan para crear objetos)

1

Puede utilizar esta construcción para obtener el objeto que es no null, undefined, etc. Esto se usa en los casos en que usa myObj más adelante en el código que requiere que sea un objeto. Si, por algún motivo, myObj no está definido antes de esta línea, la reasignación lo deja undefined o null, en cuyo caso se le asignaría {}.

Se puede pensar en esto como:

// If the object is already defined 
if (myObj) 
    var myObj = myObj; 
// It was undefined or null, so assign an empty object to it. 
else 
    var myObj = {}; 
2

Para comprender el || operador, veamos primero un ejemplo bastante básico. El operador lógico O se puede usar para proporcionar un valor predeterminado para una variable definida como sigue:

var bar = false, 
foobar = 5, 
foo = bar || foobar; // foo = 5 

En este caso, foo sólo se le asigna el valor de foobar si bar se considera Falsy. Un valor falso podría considerarse igual a 0, falso, indefinido, nulo, NaN o vacío (por ejemplo, "").