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 = {};

xTenga cuidado al usar esto si un valor válido para es falso, comofalse, y solo desea establecer un valor predeterminado cuandoxno está definido.Puede usar el operador lógico OR
||que evalúa su operando correcto silVales un valor falso.Los valores falsos incluyen, por ejemplo,
null, false, 0, "", undefined, NaNfuente
xTenga cuidado al usar esto si un valor válido para es falso, comofalse, y solo desea establecer un valor predeterminado cuandoxno 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 || bforma 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.