JavaScript 中的“变量”变量
2022-08-30 05:13:53
我知道在PHP中可以有“可变”变量。例如
$x = "variable";
$$x = "Hello, World!";
echo $variable; // Displays "Hello, World!"
是否可以在JavaScript中将变量的名称作为字符串来引用?如何做到这一点?
我知道在PHP中可以有“可变”变量。例如
$x = "variable";
$$x = "Hello, World!";
echo $variable; // Displays "Hello, World!"
是否可以在JavaScript中将变量的名称作为字符串来引用?如何做到这一点?
tl;dr: 不要使用 eval
!
对此没有单一的解决方案。可以通过 动态访问一些全局变量,但这不适用于函数的局部变量。不成为 属性的全局变量是用 和 和 es 定义的变量。window
window
let
const
class
几乎总是有比使用变量更好的解决方案!相反,您应该查看数据结构,并为您的问题选择正确的结构。
如果您有一组固定的名称,例如
// BAD - DON'T DO THIS!!!
var foo = 42;
var bar = 21;
var key = 'foo';
console.log(eval(key));
将这些名称/值存储为对象的属性,并使用括号表示法动态查找它们:
// GOOD
var obj = {
foo: 42,
bar: 21,
};
var key = 'foo';
console.log(obj[key]);
在 ES2015+ 中,使用简洁的属性表示法对现有变量执行此操作更加容易:
// GOOD
var foo = 42;
var bar = 21;
var obj = {foo, bar};
var key = 'foo';
console.log(obj[key]);
如果您有“连续”编号的变量,例如
// BAD - DON'T DO THIS!!!
var foo1 = 'foo';
var foo2 = 'bar';
var foo3 = 'baz';
var index = 1;
console.log(eval('foo' + index));
那么你应该使用数组来代替,并且只需使用索引来访问相应的值:
// GOOD
var foos = ['foo', 'bar', 'baz'];
var index = 1;
console.log(foos[index - 1]);
如果你迫切地想这样做,你可以尝试使用eval():
var data = "testVariable";
eval("var temp_" + data + "=123;");
alert(temp_testVariable);
或者使用窗口对象:
var data = "testVariable";
window["temp_" + data] = 123;
alert(window["temp_" + data]);