在 PHP 中,你可以做如下惊人/可怕的事情:
$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1
有没有办法用 Javascript 做这样的事情?
例如,如果我有一个 var name = 'the name of the variable';
我可以获得对名为 name
的变量的引用吗?
原文由 Finbarr 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 PHP 中,你可以做如下惊人/可怕的事情:
$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1
有没有办法用 Javascript 做这样的事情?
例如,如果我有一个 var name = 'the name of the variable';
我可以获得对名为 name
的变量的引用吗?
原文由 Finbarr 发布,翻译遵循 CC BY-SA 4.0 许可协议
eval
是一种选择。
var a = 1;
var name = 'a';
document.write(eval(name)); // 1
警告: 请注意,如果您不知道自己在做什么,不建议使用 eval()
函数,因为它会带来多个安全问题。除非绝对必要,否则请使用其他东西。有关更多信息,请参阅 eval 的 MDN 页面。
原文由 erickb 发布,翻译遵循 CC BY-SA 4.0 许可协议
13 回答12.8k 阅读
7 回答2k 阅读
3 回答1.1k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
6 回答936 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决
由于 ECMA-/Javascript 都是关于
Objects
和Contexts
(它们也是某种对象),所以每个变量都存储在一个所谓的 变量 中(或者在函数的情况下, 激活对象)。因此,如果您创建这样的变量:
在 全局范围内(= 无函数上下文),您将这些变量隐式写入 全局对象(= 浏览器中的
window
)。这些可以通过使用“点”或“括号”符号来访问:
或者
这仅适用于此特定实例中的全局对象,因为 全局对象 的 变量对象 是
window
对象本身。在函数的上下文中,您无法直接访问 Activation Object 。例如:new
创建自定义对象(上下文)的新实例。如果没有new
,函数的范围也是global
的(=window)。此示例将分别警告undefined
和1
。如果我们替换this.a = 1; this.b = 2
与:两个警报输出都未定义。在那种情况下,变量
a
和b
将从foobar
存储在激活对象中,我们无法访问(当然我们可以通过调用a
和b
直接访问它们)。