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?
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?
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
devolucionesexpr1
si se puede convertir en true; de lo contrario, devuelveexpr2
. 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
.
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
Si es Attacklab.wmd_env.buttons
null
o undefined
, que se establecerá en el valor predeterminado _4
.
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.
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.
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
Buen punto, probablemente debería haber dejado un comentario. De todos modos, mi respuesta ha sido actualizada. –
+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). –
Corrija el título. – rkb
Wow se necesitaron 7 intentos para obtener el título correcto ... – Pool