Eu sei que é possível em PHP ter variáveis "variáveis". Por exemplo
$x = "variable";
$$x = "hello, world!";
echo $variable; // displays "hello, world!"
É possível se referir a uma variável por seu nome como uma string em javascript? Como isso seria feito?
javascript
variables
variable-variables
ShoeLace1291
fonte
fonte
Respostas:
Não existe uma solução única para isso (bem, existe
eval
, mas não vamos considerar isso seriamente). É possível acessar algumas variáveis globais dinamicamente viawindow
, mas isso não funciona para variáveis locais de uma função. Variáveis globais que não se tornam uma propriedade dewindow
são variáveis definidas comlet
econst
, eclass
es.Quase sempre existe uma solução melhor do que usar variáveis variáveis! Em vez disso, você deve examinar as estruturas de dados e escolher a correta para o seu problema.
Se você tiver um conjunto fixo de nomes, como
armazene esses nomes / valores como propriedades de um objeto e use a notação de colchetes para procurá-los dinamicamente:
No ES2015 + é ainda mais fácil fazer isso para variáveis existentes usando notação de propriedade concisa :
Se você tiver variáveis numeradas "consecutivamente", como
então, você deve usar uma matriz e simplesmente usar o índice para acessar o valor correspondente:
fonte
Se você está desesperado para fazer isso, você pode tentar usar eval ():
Ou usando o objeto janela:
http://www.hiteshagrawal.com/javascript/dynamic-variables-in-javascript
fonte
eval
não pode criar variáveis locais no modo estrito. Uma chamada indireta pode criar variáveis globais, no entanto.Para fazer referência a uma variável em javascript com apenas uma string, você pode usar
Você pode definir e referenciar variáveis e objetos em variáveis também.
fonte
Diferente do PHP, JavaScript não oferece acesso ao array global (que contém referências a todos os nomes de variáveis declarados atualmente). Como tal, o JavaScript não oferece suporte nativo para variáveis variáveis. Você pode, no entanto, emular esse recurso, desde que defina todas as suas variáveis como parte de um array ou objeto. Isso, por sua vez, criará um array gloabls para você. Por exemplo, em vez de declarar a variável
hello
no escopo global assim:vamos encapsulá-lo dentro de um objeto. Chamaremos esse objeto de vv (variáveis variáveis):
Agora podemos nos referir à variável por seu índice, e como os índices de array podem ser fornecidos usando uma variável, estamos de fato fazendo uso de uma variável variável:
A resposta à sua pergunta
Vamos aplicar isso ao código que você forneceu na pergunta original:
Um uso prático
Embora o código anterior possa parecer ridiculamente complicado e impraticável, há usos práticos para variáveis variáveis em JavaScript usando esse tipo de encapsulamento. No exemplo abaixo, usamos o mesmo conceito para obter o ID de um número indefinido de elementos HTML.
Este exemplo declara variáveis variáveis (digita
elementIds
) com base no ID de cada elemento e atribuirá o nó desse elemento como o valor de cada variável. E uma vez que usar variáveis globais em JavaScript é geralmente desencorajado, dar às suas variáveis de variáveis um escopo exclusivo (neste caso, declará-las dentro doelementIds
array) não é apenas legal, mas também mais responsável.fonte
Claro que você pode, mas não faça. As variáveis devem ser globais.
fonte
fonte
Você pode usar o JavaScript
eval(str)
função .O que essa função faz é converter a string fornecida em código JS e, em seguida, executá-la.
Por exemplo:
Portanto, para usá-lo como uma variável variável, você pode fazer o seguinte:
Isso produzirá exatamente a mesma saída que:
(O exemplo é retirado do manual do PHP sobre variáveis variáveis .)
fonte