Установите несколько переменных в одно и то же значение в Javascript

Я инициализировал несколько переменных в глобальной области видимости в файле Javascript:

var moveUp, moveDown, moveLeft, moveRight;
var mouseDown, touchDown;

Мне нужно установить все эти переменные в false, это код, который у меня есть в настоящее время:

moveUp = false;
moveDown = false;
moveLeft = false;
moveRight = false
mouseDown = false;
touchDown = false;

Есть ли способ, которым я могу установить все эти переменные на одно значение в одной строке кода или код, который у меня в настоящее время имеет лучший способ сделать это

Ответ 1

Ничто не мешает вам делать

moveUp = moveDown = moveLeft = moveRight = mouseDown = touchDown = false;

Проверьте этот пример

var a, b, c;
a = b = c = 10;
console.log(a + b + c)

Ответ 2

Ничто не мешает вам сделать это, но задержитесь!

Есть некоторые 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).

Кроме того, как указано в комментариях (и это не только в случае этого вопроса), всякий раз, когда вы назначаете объекты переменной, ссылка копируется вместо фактического объекта. Обе переменные будут по-прежнему указывать на один и тот же объект, поэтому любое изменение в одной переменной будет отражено в другой переменной и победит цель вашей конечной цели.

Ответ 3

Существует еще один вариант, который не вводит глобальные getchas при попытке инициализировать несколько переменных для одного и того же значения. Независимо от того, является ли это предпочтительным для долгого пути, это вызов суда. Вероятно, он будет медленнее и может быть или не быть более читаемым. В вашем конкретном случае я считаю, что длинный путь, вероятно, более читабельный и поддерживаемый, а также быстрый.

Другой способ использует Назначение деструктурирования.

let [moveUp, moveDown,
     moveLeft, moveRight,
     mouseDown, touchDown] = Array(6).fill(false);

console.log(JSON.stringify({
    moveUp, moveDown,
    moveLeft, moveRight,
    mouseDown, touchDown
}, null, '  '));