31
var foo = "bar"
var bar  = "realvalue";

是否可以打印barusing的值foo

4

8 回答 8

44

方法一:全局变量

var foo = "bar";
var bar  = "realvalue";
alert(window[foo]);

或者

方法2:命名空间
将你的js划分为命名空间

var namespace = {
 foo : "bar",
 bar : "realvalue"
};
alert(namespace[namespace.foo]);
于 2012-12-18T08:46:40.350 回答
17

是的,你可以做这样的事情eval

var foo = "bar";
var bar  = "realvalue";
alert(eval(foo));

编辑:似乎很多人反对使用 eval() 函数。我在使用它之前的建议是阅读这个问题:为什么使用 JavaScript eval 函数是个坏主意?

然后,一旦您了解了风险,您就可以自己决定是否要使用它。

于 2012-12-18T08:48:48.347 回答
14

如果它是一个全局变量,你可以使用window[foo]

于 2012-12-18T08:46:11.560 回答
10

不要使用非全局变量进行这种构造,只需将您可能会浮动的任何变量都限定在范围内。

var myscope = {
    bar: 'realvalue'
},
foo = 'bar';

alert(myscope[foo]);

顺便说一句,上面不依赖浏览器的默认行为来在window对象中注册全局变量,使其也适用于 Node.js 之类的东西。

于 2012-12-18T08:55:39.247 回答
2

全局变量是在window对象上定义的,因此您可以使用:

var bar = "realvalue";
alert(window["bar"]);
于 2012-12-18T08:51:12.190 回答
2
var foo = "bar";
var bar  = "realvalue";
foo=bar;
console.log(foo);
alert(foo);
于 2012-12-18T11:56:40.547 回答
1
 var foo = "bar";
 var bar  = "realvalue";
 alert(eval(foo));
于 2013-01-02T10:00:18.630 回答
0

是的,通过eval. 但不幸的是,并非没有eval,这是一个不好的主意

于 2012-12-18T08:47:18.310 回答