var elementIds = [],
elements = ['message','fillOrStroke','sizePicker','colorPicker']; //The items in this array could be defined automatically via an input, database query, event, etc.
elements.forEach( (element) => {
elementIds[element] = document.getElementById(element);
});
8条答案
按热度按时间ffscu2ro1#
文件名;文件名:Don't use
eval
!这个问题没有单一的解决方案。可以通过
window
动态访问 * 一些 * 全局变量,但这对函数的局部变量不起作用。* 不 * 成为window
属性的全局变量是用let
和const
以及class
定义的变量。**几乎总是有比使用变量更好的解决方案!**相反,您应该查看data structures并选择适合您的问题的解决方案。
如果您有一组固定的名称,例如
将这些名称/值存储为对象属性,并使用 * 括号表示法 * 动态查找它们:
在**ES 2015 +**中,使用 * 简洁的属性表示法 * 对现有变量执行此操作更容易:
如果您有“连续”编号的变量,例如
那么你应该使用一个数组来代替,并且简单地使用索引来访问相应的值:
pjngdqdw2#
如果你非常想这么做,你可以尝试使用eval():
或者使用window对象:
hpxqektj3#
要在JavaScript中仅使用字符串引用变量,可以使用
您可以设置和引用变量,也可以设置和引用变量中的对象。
ujv3wf0j4#
与PHP不同,JavaScript不提供对全局数组的访问(包含对当前声明的所有变量名的引用)。因此,JavaScript不提供对变量的本地支持。但是,只要将所有变量定义为数组或对象的一部分,就可以模拟此功能。这将依次为您创建一个全局数组。例如,而不是像这样在全局作用域中声明变量
hello
:让我们把它封装在一个对象中,我们把这个对象命名为
vv
(variable variables):现在我们可以通过变量的索引来引用变量,由于数组索引可以通过变量来提供,我们实际上是在使用变量variable:
你问题的答案
让我们将此应用于您在原始问题中提供的代码:
实用
虽然前面的代码可能看起来非常繁琐和不切实际,但在JavaScript中使用这种封装类型的变量变量有实际用途。在下面的示例中,我们使用相同的概念来获取未定义数量的HTML元素的ID。
这个例子基于每个元素的ID声明了变量变量(
elementIds
中的键),并将该元素的节点赋为每个变量的值。由于JavaScript中通常不鼓励使用全局变量,因此给变量变量一个唯一的作用域(在这个例子中,在elementIds
数组中声明它们)不仅简洁,而且更可靠。vsikbqxv5#
sf6xfgos6#
当然可以,但不要。变量必须是全局的。
0tdrvxhp7#
您可以使用 * global *
window
对象或this
:window
:或使用点:
这一点:
或使用点
现实生活中的例子:
qc6wkl3g8#
您可以使用JavaScript
eval(str)
函数。此函数将提供的字符串转换为JavaScript代码,然后执行它。
例如:
因此要将其用作变量变量,可以执行以下操作:
这将产生与以下内容完全相同的输出:
(示例取自the PHP manual on variable variables。)