在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 = '变量的名称';我可以得到一个引用的变量与名称?
当前回答
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)
其他回答
由于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直接访问它们)。
Eval是一个选项。
var a = 1; var name = 'a'; document.write (eval ());/ / 1
警告:注意,如果您不知道自己在做什么,不建议使用eval()函数,因为它会带来多种安全问题。除非绝对必要,否则使用其他东西。有关更多信息,请参阅MDN页面的eval。
这将做你在php中所做的事情:
var a = 1;
var b = 2;
var ccc = 3;
var name = 'a';
console.log( window[name] ); // 1
我需要绘制多个FormData在飞行和对象的方式工作得很好
var forms = {}
然后在我的循环中,无论我需要创建一个表格数据我使用
forms["formdata"+counter]=new FormData();
forms["formdata"+counter].append(var_name, var_value);
虽然这有一个公认的答案,但我想补充一个观察:
在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(颜色);
我希望这对一些人有用。