提问人:Aaron Luman 提问时间:11/1/2009 最后编辑:CommunityAaron Luman 更新时间:7/4/2011 访问量:525
Javascript 相当于 PHP 的 $$varName [duplicate]
Javascript's equivalent to PHP's $$varName [duplicate]
问:
在PHP中,我可以有:
$theVariable = "bigToe";
$bigToe = "is broken";
这样:
echo "my ".$theVariable." ".$$theVariable;
将显示
my bigToe is broken
我该如何去做与 JavaScript 类似的事情?
答:
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
我会使用数组而不是:window
eval
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赞
Brett Zamir
7/14/2012
@Jed Smith:引用 window 的动态属性并不总是安全的,特别是如果它是动态函数调用,但它当然比 更安全。例如,如果“bigToe”是由共享用户数据创建的,它可以用来覆盖一些重要的全局变量。eval
评论