Javascript 相当于 PHP 的 $$varName [duplicate]

Javascript's equivalent to PHP's $$varName [duplicate]

提问人:Aaron Luman 提问时间:11/1/2009 最后编辑:CommunityAaron Luman 更新时间:7/4/2011 访问量:525

问:

这个问题在这里已经有答案了:
14年前关闭。

可能的重复:
如何通过串联创建另一个变量来访问javascript变量值?

在PHP中,我可以有:

$theVariable = "bigToe";
$bigToe = "is broken";

这样:

echo "my ".$theVariable." ".$$theVariable;

将显示

my bigToe is broken

我该如何去做与 JavaScript 类似的事情?

php javascript 变量

评论

1赞 Crescent Fresh 11/1/2009
参见:stackoverflow.com/questions/993013/...
1赞 JAL 11/1/2009
你最好在PHP中使用关联数组,或者在JavaScript中使用对象。
0赞 Jed Smith 11/1/2009
@Code Duck:在某些情况下,它很有用。
2赞 cllpse 11/1/2009
不要尝试实现其他编程语言的错误
0赞 JAL 11/2/2009
@Jed Smith - 你不能用动态变量做任何事情,你不能用关联数组或对象做任何事情,而且这种方法的可维护性要差得多。

答:

1赞 olliej 11/1/2009 #1

只是

eval("variableName")

尽管您必须确保知道评估的确切值,因为如果您将其传递给不受信任的内容,它可以用于脚本注入

评论

1赞 Fabien Ménager 11/1/2009
你绝对不应该使用 eval
1赞 olliej 11/1/2009
@Fabien:我知道 eval 存在大量的安全风险,我甚至明确地评论了这一点。也就是说,实现所要求的唯一方法是 eval,说“你绝对不应该使用 eval”意味着我的答案应该是“这是不可能的”,这显然是错误的。
5赞 Eli 11/1/2009 #2

这里有一篇关于 JavaScript 中动态变量的很好的文章:

http://www.hiteshagrawal.com/javascript/dynamic-variables-in-javascript

1赞 DavidWinterbottom 11/1/2009 #3

一种方法是使用该函数eval

var theVariable = "bigToe";
var bigToe = "is broken";
console.log('my '+theVariable+' '+eval(theVariable));

另一种方法是使用对象,该对象包含每个全局变量的键值对。它可以作为数组访问:window

var theVariable = "bigToe";
var bigToe = "is broken";
console.log('my '+theVariable+' '+window[theVariable]);

这两种方法都会将答案打印到 Firebug 控制台。

评论

2赞 Fabien Ménager 11/1/2009
“窗口”选项是最好的。如果 var 不在全局范围内(例如在函数中声明),则应将 “window” 替换为 “this”或包含对象名称
1赞 olliej 11/1/2009
@Fabien:如果 var 不在全局范围内,那么使用“this”作为前缀对你没有帮助——“this”和“window”通常可以互换的唯一原因是因为当调用一个没有基的函数时,“this”始终是全局对象,而 window 只是该全局对象的别名。
3赞 karim79 11/1/2009 #4

我会使用数组而不是:windoweval

var bigToe = "big toe";
window[bigToe] = ' is broken';
alert("my " + bigToe + window[bigToe]);

评论

0赞 Aaron Luman 11/1/2009
为什么你更喜欢 window[] 而不是 eval()?
1赞 Jed Smith 11/1/2009
@baiano:消除了 的使用带来的任何安全问题,而且引用字典总是比评估 Javascript 以产生解决方案更快。eval
0赞 karim79 11/1/2009
@baiano - 仅仅是因为我总是倾向于避免使用,如果我可能的话。查看 stackoverflow.com/questions/86513/...eval
0赞 Brett Zamir 7/14/2012
@Jed Smith:引用 window 的动态属性并不总是安全的,特别是如果它是动态函数调用,但它当然比 更安全。例如,如果“bigToe”是由共享用户数据创建的,它可以用来覆盖一些重要的全局变量。eval