如何显示另一个变量的值?

Rak*_*yal 31 javascript

var foo = "bar"
var bar  = "realvalue";
Run Code Online (Sandbox Code Playgroud)

是否有可能要打印的值bar使用foo

Akh*_*ran 44

方法1:全局变量

var foo = "bar";
var bar  = "realvalue";
alert(window[foo]);
Run Code Online (Sandbox Code Playgroud)

要么

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

var namespace = {
 foo : "bar",
 bar : "realvalue"
};
alert(namespace[namespace.foo]);
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个解决方案.命名空间的东西,虽然不是真正的命名空间,但是javascript对象,真的很酷. (2认同)
  • 出于好奇,第一个解决方案不仅限于浏览器吗?它会在node.js应用程序中运行吗? (2认同)

cow*_*wls 17

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

var foo = "bar";
var bar  = "realvalue";
alert(eval(foo));
Run Code Online (Sandbox Code Playgroud)

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

一旦你了解了风险,你可以自己决定,如果你想使用它.

  • 为什么选票呢?这回答了这个问题 (8认同)
  • 它显示了在这种情况下如何使用eval,"eval"是邪恶是另一回事,它是一个正确而有效的答案 (6认同)
  • -1我认为这是一个糟糕的答案,因为它建议使用危险的功能,其中存在更安全的替代品.如果它建议避免使用eval,或使用eval的潜在问题,或者这些问题甚至存在,或更好的替代方案,我会删除我的投票. (5认同)
  • @cowls现在我只是不同意这个建议,并且认为它不再是误导.投票已被删除.:) (2认同)

Mos*_*eyi 14

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


Ja͢*_*͢ck 10

不要使用非全局变量来执行此类构造,只需考虑您可能会浮动的任何变量.

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

alert(myscope[foo]);
Run Code Online (Sandbox Code Playgroud)

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