在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 = '变量的名称';我可以得到一个引用的变量与名称?
当前回答
您可以使用窗口对象来获取它。
window['myVar']
Window有一个对你正在使用的所有全局变量和全局函数的引用。
其他回答
如果你不想使用像window或global (node)这样的全局对象,你可以尝试这样做:
var obj = {};
obj['whatever'] = 'There\'s no need to store even more stuff in a global object.';
console.log(obj['whatever']);
Eval()在我的测试中不起作用。但是可以向DOM树中添加新的JavaScript代码。这里有一个函数,它添加了一个新变量:
function createVariable(varName,varContent)
{
var scriptStr = "var "+varName+"= \""+varContent+"\""
var node_scriptCode = document.createTextNode( scriptStr )
var node_script = document.createElement("script");
node_script.type = "text/javascript"
node_script.appendChild(node_scriptCode);
var node_head = document.getElementsByTagName("head")[0]
node_head.appendChild(node_script);
}
createVariable("dynamicVar", "some content")
console.log(dynamicVar)
他们的意思是不,你不能。 没有办法完成它。 所以你可以这样做
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对象的属性。
虽然这有一个公认的答案,但我想补充一个观察:
在ES6中使用let无效:
/*这不是工作*/ let t = "skyBlue", M = "黄金", B = "番茄"; Let color = window["b"]; console.log(颜色);
但是使用var是可行的
/*这个正在工作*/ var t = "skyBlue", M = "黄金", B = "番茄"; Let color = window["b"]; console.log(颜色);
我希望这对一些人有用。