在PHP中,你可以做一些惊人/可怕的事情,比如:

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

有没有办法用Javascript做这样的事情?

例如,如果我有var name = 'the name of the variable';,我能得到名为name的变量的引用吗?

推荐答案

由于ECMA-/Javascript都是大约ObjectsContexts(它们也是某种对象),所以每个变量都存储在一个名为Variable-(或者在函数的情况下是Activation Object)的类中.

所以如果你创建这样的变量:

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

Global scope(=no函数上下文)中,您隐式地将这些变量写入Global object(在浏览器中=window).

通过使用"点"或"括号"符号可以访问:

var name = window.a;

var name = window['a'];

This only w或ks f或 the global object in this particular instance, because the Variable Object of the Global Object is the window object itself. Within the Context of a function, you don't have direct access to the Activation Object. F或 instance:

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(=窗口).该示例将分别警告undefined1.如果我们将this.a = 1; this.b = 2替换为:

var a = 1,
    b = 2;

Both alert outputs would be undefined. In that scenario, the variables a and b would get st或ed in the Activation Object from foobar, which we cannot access (of course we could access those directly by calling a and b).

Javascript相关问答推荐

在卡信息之间切换

如何通过继承contentitable属性的元素捕捉keydown事件?

为什么使用MAX_SAFE_INTEGER生成随机整数时数字分布不准确?

将数据从strapi提取到next.js,但响应延迟API URL

在Angular中将样式应用于innerHTML

点击按钮一次有文本出现和褪色,而不是点击两次?(html,CSS,JavaScript)

在grafana情节,避免冲突的情节和传说

无法使用单击按钮时的useState将数据从一个页面传递到另一个页面

在WordPress中使用带有WPCode的Java代码片段时出现意外令牌错误

当id匹配时对属性值求和并使用JavaScript返回结果

try 使用javascript隐藏下拉 Select

如何在JAVASCRIPT中临时删除eventListener?

将异步回调转换为异步生成器模式

在不删除代码的情况下禁用Java弹出功能WordPress

删除元素属性或样式属性的首选方法

当我点击一个按钮后按回车键时,如何阻止它再次被点击

更改agGRID/Reaction中的单元格格式

重新渲染过多(&Q).REACT限制渲染次数以防止无限循环.使用REACT下拉菜单时

我如何才能获得价值观察家&对象&S的价值?

在每次重新加载页面时更改指针光标