Ответ 1
Ничто не мешает вам делать
moveUp = moveDown = moveLeft = moveRight = mouseDown = touchDown = false;
Проверьте этот пример
var a, b, c;
a = b = c = 10;
console.log(a + b + c)
Я инициализировал несколько переменных в глобальной области видимости в файле Javascript:
var moveUp, moveDown, moveLeft, moveRight;
var mouseDown, touchDown;
Мне нужно установить все эти переменные в false, это код, который у меня есть в настоящее время:
moveUp = false;
moveDown = false;
moveLeft = false;
moveRight = false
mouseDown = false;
touchDown = false;
Есть ли способ, которым я могу установить все эти переменные на одно значение в одной строке кода или код, который у меня в настоящее время имеет лучший способ сделать это
Ничто не мешает вам делать
moveUp = moveDown = moveLeft = moveRight = mouseDown = touchDown = false;
Проверьте этот пример
var a, b, c;
a = b = c = 10;
console.log(a + b + c)
Есть некоторые gotchas. Назначение в Javascript справа налево, поэтому, когда вы пишете:
var moveUp = moveDown = moveLeft = moveRight = mouseDown = touchDown = false;
он эффективно переводит:
var moveUp = (moveDown = (moveLeft = (moveRight = (mouseDown = (touchDown = false)))));
который эффективно переводит на:
var moveUp = (window.moveDown = (window.moveLeft = (window.moveRight = (window.mouseDown = (window.touchDown = false)))));
Неправильно, вы просто создали три 5 глобальных переменных - я уверен, что вы не хотели этого делать. В приведенном выше примере предполагается, что вы запускаете свой код в браузере, следовательно window
. Если бы вы были в другом окружении, эти переменные были бы привязаны к тому, какой глобальный контекст будет для этой среды (т.е. В node, он будет прикреплен к process
).
Короче говоря, вы должны придерживаться длинного пути. Это некрасиво, там больше символов для ввода, но по крайней мере вы не будете загромождать глобальное пространство имен и получать странные взгляды от других людей ( JK).
Кроме того, как указано в комментариях (и это не только в случае этого вопроса), всякий раз, когда вы назначаете объекты переменной, ссылка копируется вместо фактического объекта. Обе переменные будут по-прежнему указывать на один и тот же объект, поэтому любое изменение в одной переменной будет отражено в другой переменной и победит цель вашей конечной цели.
Существует еще один вариант, который не вводит глобальные getchas при попытке инициализировать несколько переменных для одного и того же значения. Независимо от того, является ли это предпочтительным для долгого пути, это вызов суда. Вероятно, он будет медленнее и может быть или не быть более читаемым. В вашем конкретном случае я считаю, что длинный путь, вероятно, более читабельный и поддерживаемый, а также быстрый.
Другой способ использует Назначение деструктурирования.
let [moveUp, moveDown,
moveLeft, moveRight,
mouseDown, touchDown] = Array(6).fill(false);
console.log(JSON.stringify({
moveUp, moveDown,
moveLeft, moveRight,
mouseDown, touchDown
}, null, ' '));