2009-05-06 37 views
6
Attacklab.wmd_env.buttons=Attacklab.wmd_env.buttons||_4; 

¿Qué hace el || hacer en este caso?
Agrega _4 a la matriz que es Attacklab.wmd_env.buttons?¿Qué hace el || operador hacer?

+4

Corrija el título. – rkb

+4

Wow se necesitaron 7 intentos para obtener el título correcto ... – Pool

Respuesta

18

El operador || en JavaScript devuelve el valor de la izquierda si ese valor no se evalúa como false, de lo contrario, devuelve el valor de la derecha.

De Mozilla's Core JavaScript 1.5 Reference:

expr1 || expr2
devoluciones expr1 si se puede convertir en true; de lo contrario, devuelve expr2. Por lo tanto, cuando se usa con valores booleanos, || devuelve verdadero si cualquiera de los operandos es verdadero; si ambos son falsos, devuelve falso.

Por lo tanto, en este caso, si Attacklab.wmd_env.buttons no tiene un valor, se establece el valor de _4.

+0

Es extraño que MDC use bastante ambiguo "Devuelve expr1 si ** se puede convertir ** a verdadero". En realidad, no se trata de "poder convertir", sino de la expresión de valor que devuelve. – kangax

8

Si es Attacklab.wmd_env.buttonsnull o undefined, que se establecerá en el valor predeterminado _4.

12

Es una forma elegante de la escritura

if(!Attacklab.wmd_env.buttons) 
    Attacklab.wmd_env.buttons = _4; 

Es agradable para proporcionar valores por defecto. Tenga en cuenta que no solo null y undefined activarán el condicional, sino también 0, false y '', es decir, todo lo que se considere false en contextos booleanos.

+0

+1 para indicar explícitamente qué valores se evalúan como falso –

+0

Y, por supuesto, 'NaN';) – kangax

+0

@kangax: yup, eso era lo único que faltaba en la lista (ver ECMA-262, sección 9.2) – Christoph

4

The || el operador verifica si el valor proporcionado en el lado izquierdo de la expresión es falso (en un contexto booleano). Si es así, devuelve un valor alternativo indicado por el lado derecho de la expresión. De lo contrario, devuelve el valor original.

Así, por ejemplo, el siguiente código establecería 'Foo' a un valor por defecto si es nulo:

 
Foo = Foo || "Default Value" 

Esto a veces se llama el operador coalescente. Es compatible con otros idiomas, como Ruby y Perl. C# tiene el ?? operador que hace lo mismo.

+0

Entonces, con esta respuesta él sabe cómo se llama, y ​​qué otros lenguajes usan, e incluso la sintaxis diferente en C# ... y él todavía no sabe lo que hace. – Beska

+0

Buen punto, probablemente debería haber dejado un comentario. De todos modos, mi respuesta ha sido actualizada. –

+0

+1 para el nombre correcto! Ninguna otra pregunta/respuesta parecían querer dar eso ... Me ayudó a encontrar el equivalente en Xquery (es $ $ foo: = ($ foo, "valor predeterminado") [1] para cualquiera que tenga curiosidad). –