Я инициализировал несколько переменных в глобальной области видимости в файле JavaScript:
var moveUp, moveDown, moveLeft, moveRight;
var mouseDown, touchDown;
Мне нужно установить все эти переменные в false, вот код, который у меня есть:
moveUp = false;
moveDown = false;
moveLeft = false;
moveRight = false
mouseDown = false;
touchDown = false;
Есть ли способ, которым я могу установить все эти переменные на одно и то же значение в одной строке кода, или код, который у меня в настоящее время есть лучший способ сделать это
javascript
SUB-HDR
источник
источник
Ответы:
Ничто не мешает вам делать
Проверьте этот пример
источник
function MyObj(){this.x=1} var a,b; a = b = new MyObj(); ++a.x
также будет увеличиватьb.x
свойство.Ничто не мешает вам сделать выше, но держись!
Есть некоторые ошибки. Назначение в Javascript справа налево, поэтому, когда вы пишете:
это эффективно переводится на:
что эффективно переводится на:
Случайно, вы только что создали 5 глобальных переменных - я уверен, что вы не хотели этого делать.
Примечание. В приведенном выше примере предполагается, что вы выполняете код в браузере, следовательно
window
. Если бы вы находились в другой среде, эти переменные присоединялись бы к тому, что случается с глобальным контекстом для этой среды (то есть в Node.js, он прикреплялся бы кglobal
что является глобальным контекстом для этой среды).Теперь вы можете сначала объявить все свои переменные, а затем присвоить им одно и то же значение, и вы сможете избежать этой проблемы.
Короче говоря, оба способа будут работать просто отлично, но первый способ может потенциально привести к появлению некоторых вредоносных ошибок в вашем коде. Не совершайте грех засорения глобального пространства имен локальными переменными, если это не является абсолютно необходимым.
Примечание. Как указано в комментариях (и это касается не только этого вопроса), если рассматриваемое копируемое значение было не примитивным, а объектом, вам лучше знать о копировании по значению, а не о копировании по ссылке. При каждом назначении объектов ссылка на объект копируется вместо фактического объекта. Все переменные по-прежнему будут указывать на один и тот же объект, поэтому любое изменение одной переменной будет отражено в других переменных и вызовет у вас сильную головную боль, если вы намереваетесь скопировать значения объекта, а не ссылку.
источник
moveUp
стал ограниченным, это не имело бы значения. 5 глобальных переменных все равно будут объявлены.var a, b, c; a = b = c = 10;
очень отличается отvar a = b = c = 10;
. Итак, принятый ответ правильный. Вы решаете проблему, не связанную с принятым ответом.Есть еще одна опция, которая не вводит глобальные ошибки при попытке инициализировать несколько переменных одним и тем же значением. Является ли это предпочтительным для длинного пути, является решением суда. Это, вероятно, будет медленнее и может быть, а может и не быть более читабельным. В вашем конкретном случае, я думаю, что длинный путь, вероятно, более читабелен и удобен в обслуживании, а также быстрее.
Другой способ использует назначение деструктурирующего .
Это позволяет инициализировать набор из
var
,let
илиconst
переменных к тому же значению на одной линии все с той же ожидаемой областью.Ссылки:
MDN: массив глобальных объектов
MDN: Array.fill
источник
same
объекта. Модификации одного коснутся других ...Перечисленные вами исходные переменные могут быть объявлены и присвоены одному и тому же значению в короткой строке кода с использованием назначения деструктурирования. Ключевые слова
let
,const
иvar
все могут быть использованы для этого типа назначения.источник
Поместите переменную в массив и используйте цикл for, чтобы присвоить одно и то же значение нескольким переменным.
источник