Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript';s相当于PHP';s$$varName_Php_Javascript_Variable Variables - Fatal编程技术网

Javascript';s相当于PHP';s$$varName

Javascript';s相当于PHP';s$$varName,php,javascript,variable-variables,Php,Javascript,Variable Variables,可能重复: 在PHP中,我可以: $theVariable = "bigToe"; $bigToe = "is broken"; 以便: echo "my ".$theVariable." ".$$theVariable; 将显示 my bigToe is broken 我该如何做类似于JavaScript的事情呢?简单地说 eval("variableName") 尽管您必须确保您知道评估的确切值,因为如果您传递的是不受信任的内容,它可以用于脚本注入这里有一篇关于JavaScript

可能重复:

在PHP中,我可以:

$theVariable = "bigToe";
$bigToe = "is broken";
以便:

echo "my ".$theVariable." ".$$theVariable;
将显示

my bigToe is broken
我该如何做类似于JavaScript的事情呢?

简单地说

eval("variableName")

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

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


一种方法是使用
eval
功能

var theVariable = "bigToe";
var bigToe = "is broken";
console.log('my '+theVariable+' '+eval(theVariable));
另一种方法是使用
窗口
对象,它保存每个全局变量的键值对。它可以作为数组访问:

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

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

我会使用
窗口
数组而不是
eval

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

请参阅:您最好在PHP中使用关联数组,或在JavaScript中使用对象。@Code Duck:在某些情况下它很有用。不要尝试实现其他编程语言mistakes@JedSmith-对于一个动态变量,你可以做任何事情,而对于一个关联数组或对象,而且这种方法的可维护性要低得多。为什么您更喜欢window[]而不是eval()?@baiano:消除了使用
eval
时带来的任何安全问题,另外,引用字典总是比仅仅为了产生一个解决方案而评估Javascript更快。@baiano-因为我总是倾向于避免使用
eval
,如果我能帮助的话。请参阅@Jed Smith:引用window的动态属性并不总是安全的,特别是当它是一个动态函数调用时,但它当然比
eval
更安全。例如,如果“bigToe”是由共享用户数据创建的,那么它可以用来覆盖一些重要的全局变量。您绝对不应该使用eval@Fabien:我知道eval有大量的安全风险,我甚至对此发表了明确的评论。也就是说,实现要求的唯一方法是eval,说“你绝对不应该使用eval”意味着我的回答应该是“不可能”,这显然是错误的。“窗口”选项是最好的。如果您的var不在全局范围内(例如在函数中声明),则应将“window”替换为“this”或包含该变量的对象name@Fabien:如果变量不在全局范围内,那么,使用“this”作为前缀对您没有帮助——“this”和“window”通常可以互换的唯一原因是,当调用一个没有基的函数时,“this”始终是全局对象,而window只是该全局对象的别名。