在PHP中,你可以做这样惊人/可怕的事情:

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

有什么方法可以用Javascript做这样的事情吗?

例如,如果我有一个var name = '变量的名称';我可以得到一个引用的变量与名称?


当前回答

最好使用创建名称空间并在其中声明变量,而不是将其添加到全局对象。我们还可以创建一个函数来获取和设置值

请看下面的代码片段:

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

以类似的方式,我们可以声明和使用多个变量。虽然这将增加代码行数,但代码将更健壮,更不容易出错。

其他回答

在Javascript中,你可以使用所有属性都是键值对这一事实。jAndy已经提到了这一点,但我不认为他的回答显示了它是如何被利用的。

通常情况下,你不是试图创建一个变量来保存变量名,而是试图生成变量名,然后使用它们。PHP用$$var标记,但Javascript不需要,因为属性键可以与数组键互换。

var id = "abc";
var mine = {};
mine[id] = 123;
console.log(mine.abc);

给了123。通常你想要构造变量这就是为什么有间接的原因所以你也可以用另一种方式来做。

var mine = {};
mine.abc = 123;
console.log(mine["a"+"bc"]);

Eval()在我的测试中不起作用。但是可以向DOM树中添加新的JavaScript代码。这里有一个函数,它添加了一个新变量:

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)

Eval是一个选项。

var a = 1; var name = 'a'; document.write (eval ());/ / 1

警告:注意,如果您不知道自己在做什么,不建议使用eval()函数,因为它会带来多种安全问题。除非绝对必要,否则使用其他东西。有关更多信息,请参阅MDN页面的eval。

a = 'varname';
str = a+' = '+'123';
eval(str)
alert(varname);

试试这个…

虽然这有一个公认的答案,但我想补充一个观察:

在ES6中使用let无效:

/*这不是工作*/ let t = "skyBlue", M = "黄金", B = "番茄"; Let color = window["b"]; console.log(颜色);

但是使用var是可行的

/*这个正在工作*/ var t = "skyBlue", M = "黄金", B = "番茄"; Let color = window["b"]; console.log(颜色);

我希望这对一些人有用。