在 JavaScript 中使用动态变量名

新手上路,请多包涵

在 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 许可协议

阅读 981
2 个回答

由于 ECMA-/Javascript 都是关于 ObjectsContexts (它们也是某种对象),所以每个变量都存储在一个所谓的 变量 中(或者在函数的情况下, 激活对象)。

因此,如果您创建这样的变量:

 var a = 1,
 b = 2,
 c = 3;

全局范围内(= 无函数上下文),您将这些变量隐式写入 全局对象(= 浏览器中的 window )。

这些可以通过使用“点”或“括号”符号来访问:

 var name = window.a;

或者

var name = window['a'];

这仅适用于此特定实例中的全局对象,因为 全局对象变量对象window 对象本身。在函数的上下文中,您无法直接访问 Activation Object 。例如:

 function foobar() {
 this.a = 1;
 this.b = 2;

 var name = window['a']; // === undefined
 console.log(name);
 name = this['a']; // === 1
 console.log(name);
 }

 new foobar();

new 创建自定义对象(上下文)的新实例。如果没有 new ,函数的范围也是 global 的(=window)。此示例将分别警告 undefined1 。如果我们替换 this.a = 1; this.b = 2 与:

 var a = 1,
 b = 2;

两个警报输出都未定义。在那种情况下,变量 ab 将从 foobar 存储在激活对象中,我们无法访问(当然我们可以通过调用 ab 直接访问它们)。

原文由 jAndy 发布,翻译遵循 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题