一尘不染

在JavaScript中使用动态变量名称

javascript

在PHP中,您可以执行以下令人惊奇/可怕的事情:

$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1

有没有办法用Java做类似的事情?

例如,如果我有一个名称,var name = 'the name of the variable';可以得到对变量的引用name吗?


阅读 717

收藏
2020-04-22

共1个答案

一尘不染

由于ECMA-/ JavaScript是所有关于ObjectsContexts(其也somekind的对象的),每个变量被存储在这样的被称为
可变 (或在功能方面,的情况下, 激活对象 )。

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

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

全局范围 (= NO函数上下文)中,您将这些变量隐式写入 全局对象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
   alert(name);
   name = this['a']; // === 1
   alert(name);
}

new foobar();

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

var a = 1,
    b = 2;

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

2020-04-22