在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 = '变量的名称';我可以得到一个引用的变量与名称?
当前回答
他们的意思是不,你不能。 没有办法完成它。 所以你可以这样做
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中实现的那样。
其他回答
这是一个例子:
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对象的属性。
2019
博士TL;
Eval操作符可以在它调用的上下文中运行字符串表达式,并从该上下文中返回变量; 字面对象理论上可以通过write:{[varName]}来做到这一点,但它被定义阻塞了。
所以我遇到这个问题,这里的每个人都只是玩玩,没有提出真正的解决方案。但是@阿克塞尔·海德有一个很好的接近。
解是eval。 几乎是最被遗忘的运算符。(我想大多数人都是())
Eval运算符可以在它调用的上下文中动态运行表达式。并返回该表达式的结果。我们可以使用它在函数的上下文中动态返回变量的值。
例子:
function exmaple1(){
var a = 1, b = 2, default = 3;
var name = 'a';
return eval(name)
}
example1() // return 1
function example2(option){
var a = 1, b = 2, defaultValue = 3;
switch(option){
case 'a': name = 'a'; break;
case 'b': name = 'b'; break;
default: name = 'defaultValue';
}
return eval (name);
}
example2('a') // return 1
example2('b') // return 2
example2() // return 3
注意,我总是显式地写eval将运行的表达式。 避免代码中出现不必要的意外。Eval非常强 但我相信你已经知道了
顺便说一句,如果合法的话,我们可以使用字面对象来捕获变量名和值,但我们不能将计算的属性名和属性值简写结合起来,遗憾的是,这是无效的
functopn example( varName ){
var var1 = 'foo', var2 ='bar'
var capture = {[varName]}
}
example('var1') //trow 'Uncaught SyntaxError: Unexpected token }`
使用Object也很棒。
var a=123
var b=234
var temp = {"a":a,"b":b}
console.log(temp["a"],temp["b"]);
我需要绘制多个FormData在飞行和对象的方式工作得很好
var forms = {}
然后在我的循环中,无论我需要创建一个表格数据我使用
forms["formdata"+counter]=new FormData();
forms["formdata"+counter].append(var_name, var_value);
这是一个纯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