Converti stringa in nome variabile in JavaScript


260

Ho cercato soluzioni, ma non sono riuscito a trovare nulla di simile.

Ho una variabile chiamata onlyVideo.

"onlyVideo"la stringa viene passata in una funzione. Voglio impostare la variabile onlyVideoall'interno della funzione come qualcosa. Come lo posso fare?

(Esistono diverse variabili che potrebbero essere richiamate nella funzione, quindi ho bisogno che funzioni in modo dinamico, non con ifistruzioni codificate .)

Modifica: probabilmente c'è un modo migliore di fare ciò che stai tentando di fare. L'ho chiesto all'inizio della mia avventura JavaScript. Scopri come funzionano gli oggetti JavaScript.

Un'introduzione semplice:

// create JavaScript object
var obj = { "key1": 1 };

// assign - set "key2" to 2
obj.key2 = 2;

// read values
obj.key1 === 1;
obj.key2 === 2;

// read values with a string, same result as above
// but works with special characters and spaces
// and of course variables
obj["key1"] === 1;
obj["key2"] === 2;

// read with a variable
var key1Str = "key1";
obj[key1Str] === 1;

5
Per cosa stai usando questo? Sei assolutamente sicuro di doverlo impostare su una normale variabile locale e un oggetto (hash) non funzionerà?
Dogbert,

mmm ... non riesco ancora a capire perché vuoi farlo in un mondo con array. Ad ogni modo, alcuni dei tuoi codici e spiegazioni potrebbero essere di grande aiuto.
Kevin Chavez,

penso che abbiamo bisogno di maggiori dettagli su quale sia il tuo obiettivo finale
mcgrailm,

Risposte:


281

Se è una variabile globale, allora window[variableName] o nel tuo caso window["onlyVideo"]dovrebbe fare il trucco.


35
Anche se non globale, puoi accedervi in ​​questo modo scope[property]o addiritturathis[property]
Wojciech Bednarski,

7
@WojciechBednarski: non confondere ambito e contesto. thisè il contesto, ciò a cui punta dipende da come viene chiamata la funzione. In JS, il 50% delle volte thisè a windowmeno che tu non abiliti la modalità rigorosa e thisdiventi undefinede genererà un errore. L'ambito di applicazione è qualcosa di completamente diverso e non è un oggetto (tranne l'ambito globale che si riflette windownell'oggetto)
slebetman,

3
Non funziona WebWorkers(dove si selfriferisce all'ambito globale, proprio come nel browser, dove è uguale a window) e Node.js, dove globalè la variabile desiderata. E più recente funziona con ambiti locali, come il corpo della funzione.
Tomáš Zato - Ripristina Monica l'

c'è un modo per definire un constusando questo metodo?
toing_toing
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.