variable - Converter string em nome da variável em JavaScript




let javascript (7)

Eu procurei por soluções, mas não consegui encontrar nenhum que funcionasse.

Eu tenho uma variável chamada onlyVideo .

"onlyVideo" a string é passada para uma função. Eu quero definir a variável onlyVideo dentro da função como algo. Como eu posso fazer isso?

(Há um número de variáveis ​​que podem ser chamadas para a função, então eu preciso que ele funcione dinamicamente, não codificado if instruções.)

Edit: Há provavelmente uma maneira melhor de fazer o que você está tentando fazer. Eu pedi isso cedo na minha aventura JavaScript. Confira como os objetos JavaScript funcionam.

Uma simples introdução:

// 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;

Isso pode ser feito assim

(function(X, Y) {
  
  // X is the local name of the 'class'
  // Doo is default value if param X is empty
  var X = (typeof X == 'string') ? X: 'Doo';
  var Y = (typeof Y == 'string') ? Y: 'doo';
  
  // this refers to the local X defined above
  this[X] = function(doo) {
    // object variable
    this.doo = doo || 'doo it';
  }
  // prototypal inheritance for methods
  // defined by another
  this[X].prototype[Y] = function() {
    return this.doo || 'doo';
  };
  
  // make X global
  window[X] = this[X];
}('Dooa', 'dooa')); // give the names here

// test
doo = new Dooa('abc');
doo2 = new Dooa('def');
console.log(doo.dooa());
console.log(doo2.dooa());


O Javascript tem uma função eval() para tais ocasiões:

function (varString) {
  var myVar = eval(varString);
  // .....
}

Edit: Desculpe, acho que eu desnatado a questão muito rapidamente. Isso só vai te dar a variável, para defini-lo você precisa

function SetTo5(varString) {
  var newValue = 5;
  eval(varString + " = " + newValue);
}

ou se estiver usando uma string:

function SetToString(varString) {
  var newValue = "string";
  eval(varString + " = " + "'" + newValue + "'");
}

Mas eu imagino que existe uma maneira mais apropriada de realizar o que você está procurando? Eu não acho que eval () é algo que você realmente quer usar a menos que haja uma grande razão para isso. eval()


O método window ['variableName'] SOMENTE funciona se a variável estiver definida no escopo global. A resposta correta é "Refatorar". Se você puder fornecer um contexto "Objeto", existe uma possível solução geral, mas existem algumas variáveis ​​que nenhuma função global poderia resolver com base no escopo da variável.

(function(){
    var findMe = 'no way';
})();

Se for uma variável global, a window[variableName] ou a window["onlyVideo"] seu caso window["onlyVideo"] deve funcionar.


Tanto quanto eval vs. soluções variáveis ​​globais ...

Eu acho que há vantagens para cada um, mas isso é realmente uma falsa dicotomia. Se você é paranoico do namespace global, apenas crie um namespace temporário e use a mesma técnica.

var tempNamespace = {};
var myString = "myVarProperty";

tempNamespace[myString] = 5;

Tenho certeza que você poderia acessar como tempNamespace.myVarProperty (agora 5), ​​evitando usar janela para armazenamento. (A corda também pode ser colocada diretamente nos suportes)


Você pode acessar o objeto window como um array associativo e configurá-lo dessa maneira

window["onlyVideo"] = "TEST";
document.write(onlyVideo);

var myString = "echoHello";

window[myString] = function() {
    alert("Hello!");
}

echoHello();

Diga não ao malvado eval. Exemplo aqui: https://jsfiddle.net/Shaz/WmA8t/







variables