421 Stimmen

Dynamische Variablennamen in JavaScript verwenden

In PHP können Sie erstaunliche/abscheuliche Dinge wie diese tun:

$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1

Gibt es eine Möglichkeit, so etwas mit Javascript zu machen?

Wenn ich z.B. eine var name = 'the name of the variable'; kann ich einen Verweis auf die Variable mit dem Namen name ?

0voto

Axel Heider Punkte 496

Eval() hat bei meinen Tests nicht funktioniert. Aber das Hinzufügen von neuem JavaScript-Code zum DOM-Baum ist möglich. Hier ist also eine Funktion, die eine neue Variable hinzufügt:

function createVariable(varName,varContent)
{
  var scriptStr = "var "+varName+"= \""+varContent+"\""

  var node_scriptCode = document.createTextNode( scriptStr )
  var node_script = document.createElement("script");
  node_script.type = "text/javascript"
  node_script.appendChild(node_scriptCode);

  var node_head = document.getElementsByTagName("head")[0]
  node_head.appendChild(node_script);
}

createVariable("dynamicVar", "some content")
console.log(dynamicVar)

0voto

Alfgaar Punkte 172

Was sie meinen, ist: Nein, das können Sie nicht. Es gibt keine Möglichkeit, das zu erreichen. Es wäre also möglich, dass Sie so etwas tun könnten

function create(obj, const){
// where obj is an object and const is a variable name
function const () {}

const.prototype.myProperty = property_value;
// .. more prototype

return new const();

}

mit einer Erstellungsfunktion, wie sie in ECMAScript 5 implementiert ist.

0voto

HeadJk Punkte 36

Hier ist rein javascript Lösung, die nicht auf die globale dies der Laufzeitumgebung abhängig ist. Einfach zu erreichen mit Objekt Destrukturierung.

const dynamicVar = (nameValue, value) => {
    const dynamicVarObj = {
        [nameValue]: value
    }
    return dynamicVarObj;
}

const nameToUse = "myVar";
const value = 55;

const { myVar } = dynamicVar(nameToUse, value);

console.log(myVar); // prints 55

-1voto

Rishu Ranjan Punkte 366

Es ist immer besser, einen Namespace zu erstellen und eine Variable darin zu deklarieren, anstatt sie dem globalen Objekt hinzuzufügen. Wir können auch eine Funktion erstellen, um den Wert zu erhalten und zu setzen

Siehe das unten stehende Codefragment:

//creating a namespace in which all the variables will be defined.
var myObjects={};

//function that will set the name property in the myObjects namespace
function setName(val){
  myObjects.Name=val;
}

//function that will return the name property in the myObjects namespace
function getName(){
  return myObjects.Name;
}

//now we can use it like:
  setName("kevin");
  var x = getName();
  var y = x;
  console.log(y)  //"kevin"
  var z = "y";
  console.log(z); //"y"
  console.log(eval(z)); //"kevin"

Auf ähnliche Weise können wir mehrere Variablen deklarieren und verwenden. Dadurch erhöht sich zwar die Anzahl der Codezeilen, aber der Code wird robuster und weniger fehleranfällig.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X