当前位置: 首页 > 面试题库 >

在JavaScript中使用动态变量名称

卞轶
2023-03-14
问题内容

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

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

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

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


问题答案:

由于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)。



 类似资料:
  • 我想使用在数据帧中创建多个新列。列名及其内容应动态生成。 来自IRIS的示例数据: 我创建了一个函数来从变量中更改新列:

  • 我想使用<code>dplyr::mutate()</code>在数据帧中创建多个新列。应动态生成列名及其内容。 来自iris的示例数据: 我创建了一个函数,可以从<code>Petal中修改我的新列。宽度变量: 现在我创建一个循环来构建我的列: 然而,由于mutate认为varname是一个文字变量名,因此循环只创建一个新变量(称为varname),而不是四个(称为petal.2-petal.5

  • 问题内容: 如何在Java中使用动态名称分配变量?例如: 问题答案: 这不是你在Java中做事的方式。Java中没有动态变量。Java变量必须在源代码中声明。 根据要实现的目标,应使用数组、List或 Map;例如 可以使用反射来动态引用源代码中已声明的变量。但是,这仅适用于属于类成员的变量(即静态字段和实例字段)。它不适用于局部变量。

  • 我的问题很简单,但我认为Velocity不支持这一点。我必须使用vm文件中定义的变量名访问映射或对象。 配置为Map 这里的问题是,当我发送此模板进行渲染时,我得到以下代码: 所以看起来在呈现模板时,$img_src、$img_link和$img_alt没有正确定义,velocity试图在自身上呈现config对象,在下一轮呈现时,config对象已经呈现为纯文本,其余变量就放在其中。 比这更奇怪

  • 问题内容: 我想使用运行时之前不知道的字段名称过滤器来调用查询…不确定如何构造变量名称…或者我很累。 如果funct()返回的名称等于 不知道该怎么做… 问题答案: 您可以创建字典,设置参数,然后通过解压缩字典作为关键字参数将其传递给函数: