在PHP中,你可以做这样惊人/可怕的事情:
$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1
有什么方法可以用Javascript做这样的事情吗?
例如,如果我有一个var name = '变量的名称';我可以得到一个引用的变量与名称?
在PHP中,你可以做这样惊人/可怕的事情:
$a = 1;
$b = 2;
$c = 3;
$name = 'a';
echo $$name;
// prints 1
有什么方法可以用Javascript做这样的事情吗?
例如,如果我有一个var name = '变量的名称';我可以得到一个引用的变量与名称?
当前回答
最简单的解决方案:创建一个对象数组,每个对象都有两个字段(variableName,variableValue)
let allVariables = [];
for (let i = 0; i < 5; i++)
allVariables.push({ variableName: 'variable' + i, variableValue: i * 10 });
for (let i = 0; i < allVariables.length; i++)
console.log(allVariables[i].variableName + ' is ' + allVariables[i].variableValue);
输出:
variable0 is 0
variable1 is 10
variable2 is 20
variable3 is 30
variable4 is 40
console.log(allVariables) json :
[
{
"variableName": "variable0",
"variableValue": 0
},
{
"variableName": "variable1",
"variableValue": 10
},
{
"variableName": "variable2",
"variableValue": 20
},
{
"variableName": "variable3",
"variableValue": 30
},
{
"variableName": "variable4",
"variableValue": 40
}
]
其他回答
由于ECMA-/Javascript是关于对象和上下文的(也是某种对象),每个变量都存储在一个所谓的变量中(或者在函数的情况下,激活对象)。
如果你创建这样的变量:
var a = 1,
b = 2,
c = 3;
在Global作用域(= NO函数上下文)中,您隐式地将这些变量写入Global对象(=浏览器中的窗口)。
这些可以通过使用“点”或“括号”符号来访问:
var name = window.a;
or
var name = window['a'];
这只适用于这个特定实例中的全局对象,因为全局对象的变量对象是窗口对象本身。在函数的上下文中,您不能直接访问激活对象。例如:
函数foobar() { 这一点。A = 1; 这一点。B = 2; Var name = window['a'];// === undefined console.log(名称); Name = this['a'];// === 1 console.log(名称); } 新foobar ();
New创建一个自定义对象(context)的新实例。如果没有new,函数的作用域也是global (=window)。这个例子将分别警告为undefined和1。如果我们替换这个。A = 1;这一点。B = 2 with:
var a = 1,
b = 2;
两个警报输出都是未定义的。在这种情况下,变量a和b将从foobar存储在激活对象中,我们不能访问(当然,我们可以通过调用a和b直接访问它们)。
这是一个纯javascript解决方案,它不依赖于运行时环境的全局this。使用对象解构实现简单。
const dynamicVar = (nameValue, value) => {
const dynamicVarObj = {
[nameValue]: value
}
return dynamicVarObj;
}
const nameToUse = "myVar";
const value = 55;
const { myVar } = dynamicVar(nameToUse, value);
console.log(myVar); // prints 55
这是一个例子:
for(var i=0; i<=3; i++) {
window['p'+i] = "hello " + i;
}
alert(p0); // hello 0
alert(p1); // hello 1
alert(p2); // hello 2
alert(p3); // hello 3
另一个例子:
var myVariable = 'coco';
window[myVariable] = 'riko';
alert(coco); // display : riko
因此,myVariable的值“coco”变成了一个变量coco。
因为全局作用域中的所有变量都是Window对象的属性。
他们的意思是不,你不能。 没有办法完成它。 所以你可以这样做
function create(obj, const){
// where obj is an object and const is a variable name
function const () {}
const.prototype.myProperty = property_value;
// .. more prototype
return new const();
}
有一个创建函数,就像在ECMAScript 5中实现的那样。
Eval是一个选项。
var a = 1; var name = 'a'; document.write (eval ());/ / 1
警告:注意,如果您不知道自己在做什么,不建议使用eval()函数,因为它会带来多种安全问题。除非绝对必要,否则使用其他东西。有关更多信息,请参阅MDN页面的eval。