Me encanta el ||=
mecanismo de Ruby . Si una variable no existe o es nil
, entonces créala y ponla igual a algo
amount # is nil
amount ||= 0 # is 0
amount ||= 5 # is 0
Necesito hacer algo similar en JavaScript ahora. ¿Cuál es la convención o la forma correcta de hacer esto? Sé ||=
que no es una sintaxis válida. 2 formas obvias de manejarlo son:
window.myLib = window.myLib || {};
// or
if (!window.myLib)
window.myLib = {};
x
Tenga cuidado al usar esto si un valor válido para es falso, comofalse
, y solo desea establecer un valor predeterminado cuandox
no está definido.Puede usar el operador lógico OR
||
que evalúa su operando correcto silVal
es un valor falso.Los valores falsos incluyen, por ejemplo,
null, false, 0, "", undefined, NaN
fuente
x
Tenga cuidado al usar esto si un valor válido para es falso, comofalse
, y solo desea establecer un valor predeterminado cuandox
no está definido.Si está trabajando con objetos, puede usar la desestructuración (desde ES6) así:
... pero no obtienes nada sobre la respuesta aceptada, excepto confusión.
fuente
El operador sobre el que preguntó ha sido propuesto como una característica en JavaScript . Actualmente se encuentra en la Etapa 3 , por lo que aún no es una parte oficial del lenguaje, pero será aceptado, con a lo sumo cambios menores si descubren problemas inesperados importantes.
Puede usarlo ahora usando el plugin de Babel plugin-Proposition-Logic-cargas-operadores . Nunca he usado ese complemento, así que no tengo idea de qué tan bien funciona.
fuente
Ruby || = asignación de cortocircuitos del operador. Se puede pensar así:
Entonces, en JavaScript, esto se ve muy similar:
Parece como se señala en los comentarios a continuación, sin embargo, que esta forma de rubí literal es menos eficiente que el lenguaje estándar de JavaScript a = a || si.
Para referencia: http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html
fuente
a = a || b
forma es más óptima jsperf.com/x-or-x-equals-0-vs-x-equals-x-or-0/3a = a || b
.a || (a = b)
tiene la semántica correcta para inferir nombres de funciones. Actualmente está en discusión para la nueva propuesta.Puede lograr el comportamiento deseado utilizando el operador | = en javascript solo para enteros. Pero primero debe definir la variable.
Para objetos
Para matrices
fuente
|
o|=
. El comportamiento deseado en la pregunta no está relacionado con las operaciones bit a bit.