JavaScript 中的可变变量

2023-12-11

据我所知,这个功能在PHP中已经存在。让我们看一下下面的 php 代码:

$color = 'red';
$$color = 'dark';

功能描述:

有时拥有可变的变量名会很方便。即,可以动态设置和使用的变量名。变量变量采用变量的值并将其视为变量的名称。在上面的例子中,red,可以作为变量的名称。此时已经定义了两个变量并存储在PHP符号树中:$color有内容"red" and $red有内容"dark".

我的问题

这可以在 JavaScript 中完成吗?


我想到了三种不同的技术,每种技术都有其警告和(第二个除外)用途:

1) 您可以在代码中的任何位置使用 JavaScript 声明一个新变量var关键词:

var $color = 'red';

变量实际上已定义自始至终的范围var发生,甚至高于var声明——也就是说,这两个函数是相同的,尽管它们看起来略有不同:

function foo() {
    doSomething();
    var x = 5;
    x += doSomethingElse();
    return x;
}

function foo() {
    var x;

    doSomething();
    x = 5;
    x += doSomethingElse();
    return x;
}

这是因为所有var在创建函数的上下文时生效,而不是在代码中出现的位置生效。更多的:可怜,被误解var

2)如果您只是分配给一个从未在任何地方声明过的自由符号,您将创建一个隐式全局变量(不受当前范围限制),这通常是一个坏主意。更多的:隐式全局变量的恐怖

3)您可以做的另一件事是拥有一个对象,它是您想要跟踪的各种变量的容器。您只需通过分配即可在对象上创建新属性:

var data = {};    // A blank object
data.foo = "bar"; // Now `data` has a `foo` property

当您需要跟踪脚本完全不知道的数据(例如基于用户输入)时,此技术特别方便,因为您可以使用点分符号和上面的文字(data.foo),或者您可以使用括号符号和字符串 (data["foo"])。在后一种情况下,字符串可以是任何表达式的结果,因此所有这些都会创建一个foo属性于data:

// Dotted notation with a literal
data.foo = 42;

// Bracketed notation with a literal string
data["foo"] = 42;

// Bracketed notation with a string coming from a variable
s = "foo";
data[s] = 42;

// Bracketed notation with a string coming from an expression
s = "o";
data["f" + s + s] = 42;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中的可变变量 的相关文章

随机推荐

  • 使用rest api时选择Azure事件中心的分区

    我正在尝试使用 python 和其余 API 向 Azure 事件中心发送消息 经过一些失败的实验后 我找到了工作代码 见下文 但我希望能够选择将事件发送到哪个分区 使用其余 API 是否可以实现这一点 如果可以 应该如何完成 user b
  • 参数分配默认值(=默认值)意味着什么? [复制]

    这个问题在这里已经有答案了 我试图理解前置条件函数并遇到 default 快速谷歌和扫描指南没有带来任何相关结果 有人可以向我解释一下吗 谢谢 func precondition condition autoclosure gt Bool
  • API-21 上的 Fragment 事务替换仍然落后

    我正在开发一个使用片段的应用程序 上周我的测试设备进行了棒棒糖更新 当我在棒棒糖设备上测试我的应用程序时 我发现 Fragment Transaction 的替换方法无法正常工作 尽管在 Kitkat 版本上一切正常 但它在 Lollipo
  • 嵌套 .pth 文件或从网络加载额外的站点目录

    目标是拥有一个通用目录 我可以在其中添加网络上的包 这些包会自动添加到sys path无需运行site addsitedir or sys path append每次我导入所述包时 有没有办法做到这一点 背景 我有一个小型用户网络 他们都需
  • 更改后无法保存 Jenkins 作业,没有可见错误

    前提 詹金斯 2 277 4Ubuntu 20 04 2 LTSopenjdk版本 11 0 11 2021 04 20 Problem 我有一份自由式工作 第一次保存所有已完成的更改 此时 保存 和 应用 按钮位于页面中底部 下次如果我进
  • NOPL在x86系统中做什么?

    NOPL在x86机器中的作用是什么 感觉好像什么也没做 但是为什么总是在汇编代码中呢 NOP是一个单字节 不执行任何操作 的操作 实际上是 无操作 NOPW NOPL 等相当于什么都不做 但会占用字和长字节 e g NOP 1byte op
  • 为什么/哪里出现错误“ 调用方法 Location.toString 的权限被拒绝”

    EDIT 我在回复评论时添加了澄清 在可能且有意义的地方 这些添加的修饰位于斜体字体样式 我已经在 Firefox 群组以及 SO 上发布了这个问题 关于 SO 至少有 25 个相关问题 其中一些代表性问题是 闪虫 跨域问题 只是一个谜 F
  • HTML / VBA 下拉菜单

    我在 VBA 和 HTML 例程方面遇到了一些问题 我必须从链接中选择https www betexplorer com next soccer 排序依据 下拉菜单并选择 联赛 项 我无法通过 VBA 执行此操作 这是我写的代码 Sub S
  • Python:哪个命令会增加 Windows 上打开文件的数量?

    关于这个主题似乎有很多问题 我似乎找不到我应该在 python 脚本中调用什么来增加打开文件限制 我知道我需要使用 setmaxstdio在 C 级别 但我不知道如何在 python 中调用它 有任何想法吗 尝试使用win32file fr
  • BSL(如何设计程序):如何将代码从单独的文件导入到定义区域?

    我对 BSL 有疑问 我想将我的代码分成单独的辅助文件并使用 require auxiliary function rkt 首先将分离的代码导入到定义区域 然而它并没有像想象的那样工作 虽然没有给出明确的错误 但似乎 DrRacket 根本
  • phpMailer gmail 垃圾邮件

    我使用 phpMailer 但有一个问题 当收件人是 Gmail 或 Yahoo 时 我的电子邮件最终会进入垃圾邮件文件夹 这怎么可能 代码是这样的 mail gt AddCustomHeader Reply to email protec
  • 获取数组中所有项目的密集排名和间隙排名

    我想使用 PHP 计算并存储数组中所有条目的密集排名和间隙排名 我想在 PHP 中执行此操作 而不是 MySQL 因为我每周处理 100 000 到 900 个组合的动态组合 这就是为什么我不能使用 MySQL 制作那么多表 我查找密集排名
  • 如何在matlab中对多张图像进行平均?

    我正在尝试从 1000 帧中获取平均图像 每个图像的大小为 512 x 512 像素 我从实验中获得的文件是 tiff 单元 16 数据 tiff 文件包含同一地点的 1000 帧 我正在考虑编写一个 m 文件 从 tiff 文件中读出 1
  • Shell 函数返回值不大于 255

    sum return 1 2 read a b sum a b echo 当我们传递 a 255 和 b 36 的值时 ans 将为 35 为什么 您要求 shell 返回该值 返回值不能大于 255 所以当你添加 a 255 和 b 36
  • java泛型加法

    我正在尝试实现提到的添加方法在通用稀疏矩阵加法问题中 class Matrix
  • MySQL 尝试截断表时出错

    我在截断 MySQL Server 5 5 上的表时遇到问题 我尝试截断的表有一列充当另一个表中的外键 The CREATE TABLE涉及的两个表如下 CREATE TABLE tbluser id int 11 NOT NULL AUT
  • 默认值、值和零初始化混乱

    我对值初始化 默认初始化和零初始化感到非常困惑 尤其是当他们针对不同的标准时C 03 and C 11 and C 14 我正在引用并试图扩展一个非常好的答案值 默认 零 初始化C 98 and C 03在这里使其更加通用 因为如果有人可以
  • Matlab互相关与相关系数问题

    我正在用 C 编写一个程序 但使用来自 matlab 的涉及互相关的数据 据我所知 当我对两组数据进行相关时 它会给出一个相关系数数字 表明它们是否相关 但我想使用互相关数据系列 当我在 Matlab 上运行互相关时 它给了我很多数据 绘制
  • 如何从Oracle中的正则表达式中提取组?

    我收到这个查询并想要提取括号之间的值 select de desc regexp substr de desc 1 from DATABASE where col name like 然而 它给了我带有括号的值 例如 TEST 我只想 测试
  • JavaScript 中的可变变量

    据我所知 这个功能在PHP中已经存在 让我们看一下下面的 php 代码 color red color dark 功能描述 有时拥有可变的变量名会很方便 即 可以动态设置和使用的变量名 变量变量采用变量的值并将其视为变量的名称 在上面的例子