Inicializei várias variáveis no escopo global em um arquivo JavaScript:
var moveUp, moveDown, moveLeft, moveRight;
var mouseDown, touchDown;
Eu preciso definir todas essas variáveis como false, este é o código que tenho atualmente:
moveUp = false;
moveDown = false;
moveLeft = false;
moveRight = false
mouseDown = false;
touchDown = false;
Existe alguma maneira de definir todas essas variáveis com o mesmo valor em uma linha de código ou é o código que atualmente tenho a melhor maneira de fazer isso
javascript
SUB-HDR
fonte
fonte
Respostas:
Nada impede você de fazer
Veja este exemplo
fonte
function MyObj(){this.x=1} var a,b; a = b = new MyObj(); ++a.x
também aumentará ab.x
propriedade.Nada impede você de fazer o acima, mas aguente!
Existem algumas dicas. A atribuição em Javascript é da direita para a esquerda, então quando você escreve:
traduz efetivamente para:
que se traduz efetivamente em:
Inadvertidamente, você acabou de criar 5 variáveis globais - algo que tenho certeza de que não queria fazer.
Nota: Meu exemplo acima pressupõe que você esteja executando seu código no navegador
window
. Se você estivesse em um ambiente diferente, essas variáveis se vinculariam a qualquer que seja o contexto global desse ambiente (por exemplo, no Node.js, ele se anexaria aglobal
qual é o contexto global para esse ambiente).Agora você pode primeiro declarar todas as suas variáveis e depois atribuí-las ao mesmo valor e evitar o problema.
Para encurtar a história, ambas as maneiras funcionariam perfeitamente, mas a primeira maneira poderia introduzir alguns erros perniciosos no seu código. Não cometa o pecado de jogar lixo no espaço de nomes global com variáveis locais, se não for absolutamente necessário.
Nota: Como indicado nos comentários (e esse não é apenas o caso desta pergunta), se o valor copiado em questão não for um valor primitivo, mas um objeto, é melhor conhecer cópia por valor vs cópia por referência. Sempre que atribuir objetos, a referência ao objeto é copiada em vez do objeto real. Todas as variáveis ainda apontam para o mesmo objeto, portanto, qualquer alteração em uma variável será refletida nas outras variáveis e causará uma grande dor de cabeça se sua intenção for copiar os valores do objeto e não a referência.
fonte
moveUp
um escopo de bloco, não faria diferença. 5 variáveis globais ainda seriam declaradas.var a, b, c; a = b = c = 10;
é muito diferente devar a = b = c = 10;
. Portanto, a resposta aceita está correta. Você está solucionando um problema não relacionado à resposta aceita.Há outra opção que não introduz dicas globais ao tentar inicializar várias variáveis para o mesmo valor. Se é preferível ou não ao longo caminho, é uma decisão judicial. Provavelmente será mais lento e poderá ou não ser mais legível. No seu caso específico, acho que o longo caminho provavelmente é mais legível e sustentável, além de ser mais rápido.
A outra maneira utiliza a atribuição de Reestruturação .
Isso permite que você inicialize um conjunto de
var
,let
ouconst
variáveis com o mesmo valor em uma única linha, todas com o mesmo escopo esperado.Referências:
MDN: objeto global de matriz
MDN: Array.fill
fonte
same
objeto. Modificações em um afetarão os outros ...Coloque a variável em uma matriz e use um loop for para atribuir o mesmo valor a várias variáveis.
fonte