Inicialicé varias variables en el ámbito global en un archivo JavaScript:
var moveUp, moveDown, moveLeft, moveRight;
var mouseDown, touchDown;
Necesito establecer todas estas variables en falso, este es el código que tengo actualmente:
moveUp = false;
moveDown = false;
moveLeft = false;
moveRight = false
mouseDown = false;
touchDown = false;
¿Hay alguna manera de que pueda establecer todas estas variables en el mismo valor en una línea de código, o es el código que tengo actualmente la mejor manera de hacer esto?
javascript
SUB-HDR
fuente
fuente
Respuestas:
Nada te impide hacer
Mira este ejemplo
fuente
function MyObj(){this.x=1} var a,b; a = b = new MyObj(); ++a.x
también incrementará lab.x
propiedad.Nada te impide hacer lo anterior, ¡pero espera!
Hay algunas trampas. La asignación en Javascript es de derecha a izquierda, así que cuando escribes:
se traduce efectivamente a:
que efectivamente se traduce en:
Sin darse cuenta, acaba de crear 5 variables globales, algo que estoy seguro de que no quería hacer.
Nota: Mi ejemplo anterior supone que está ejecutando su código en el navegador, por lo tanto
window
. Si estuviera en un entorno diferente, estas variables se unirían a cualquier contexto global para ese entorno (es decir, en Node.js, se vincularía aglobal
cuál es el contexto global para ese entorno).Ahora primero puede declarar todas sus variables y luego asignarlas al mismo valor y puede evitar el problema.
En pocas palabras, ambas formas funcionarían bien, pero la primera podría potencialmente introducir algunos errores perniciosos en su código. No cometa el pecado de ensuciar el espacio de nombres global con variables locales si no es absolutamente necesario.
Nota al margen: Como se señaló en los comentarios (y esto no es solo en el caso de esta pregunta), si el valor copiado en cuestión no era un valor primitivo sino un objeto, es mejor que conozca copia por valor versus copia por referencia. Cada vez que se asignan objetos, la referencia al objeto se copia en lugar del objeto real. Todas las variables seguirán apuntando al mismo objeto, por lo que cualquier cambio en una variable se reflejará en las otras variables y le causará un gran dolor de cabeza si su intención era copiar los valores del objeto y no la referencia.
fuente
moveUp
tener un alcance de bloque, no habría diferencia. Todavía se declararían 5 variables globales.var a, b, c; a = b = c = 10;
es muy diferente devar a = b = c = 10;
. Entonces, la respuesta aceptada es correcta. Está abordando un problema no relacionado con la respuesta aceptada.Hay otra opción que no introduce problemas globales al intentar inicializar múltiples variables al mismo valor. Si es preferible o no al largo camino es una decisión judicial. Probablemente será más lento y puede o no ser más legible. En su caso específico, creo que el camino largo es probablemente más fácil de leer y mantener, además de ser más rápido.
La otra forma utiliza la asignación de Destructuring .
Esto le permite inicializar un conjunto de
var
,let
oconst
variables al mismo valor en una sola línea, todas con el mismo alcance esperado.Referencias
MDN: Array Global Object
MDN: Array.fill
fuente
same
objeto. Las modificaciones a una afectarán a las demás ...Coloque la variable en una matriz y use un bucle for para asignar el mismo valor a múltiples variables.
fuente