在PHP中,我们可以这样做:
$variable = "name_of_variable";
$this->{$variable} = "somevalue";
如何在javascript中执行此操作?
用例应如下所示:
function Apple(){
var name = "variable_name";
this.(name) = "value";
}
console.log(new Apple());
输出
[Apple: {variable_name:"value"}]
答案 0 :(得分:11)
尝试:
this[name] = "value";
所有对象都可以使用点和数组表示法进行变量访问。
另请注意,这将允许您通过点表示法创建无法访问的名称值对:
var foo = {};
foo['bar-baz'] = 'fizzbuzz';
alert(foo.bar-baz); //this will not work because `-` is subtraction
alert(foo['bar-baz']); //this will work fine
如果要创建新的对象文字,可以使用字符串文字作为具有特殊字符的值的名称:
var foo = {'bar-baz':'fizzbuzz'};
但您无法将变量用作对象文字中的key
,因为它们被解释为要使用的名称:
var foo = 'fizz';
var bar = { foo:'buzz' }
alert( bar.fizz ); //this will not work because `foo` was the key provided
alert( bar.foo ); //alerts 'buzz'
由于其他回答者提及eval
,我将解释eval
可能有用的案例。
eval
的代码为evil
,请谨慎使用。如果您需要使用具有动态名称的变量,并且该变量在另一个对象上不存在。
重要的是要知道在全局上下文中调用var foo
会将新变量附加到全局对象(通常为window
)。但是,在闭包中,var foo
创建的变量仅存在于闭包的上下文中,并且不附加到任何特定对象。
如果在闭包中需要动态变量名,最好使用容器对象:
var container = {};
container[foo] = 'bar';
所以说的是,如果动态变量名是 required 并且无法使用容器对象,eval
可用于创建/访问/修改动态变量名称。
var evalString = ['var', variableName, '=', String.quote(variableValue), ';'].join(' ')
eval( evalString );
答案 1 :(得分:6)
您可以在Javascript中使用方括号表示法:
variable = "name_of_variable";
window[variable] = "somevalue";
您可以使用Javascript中的任何对象执行此操作。
答案 2 :(得分:3)
var name = "var_name";
var obj = {};
obj[name] = 'value';
alert(obj.var_name);
答案 3 :(得分:-2)
我建议使用关联数组来做你想做的事情,因为它们更清晰,更容易调试。
但是,如果您真的坚持,可以使用eval()
来完成此任务:
variable = "name_of_variable";
eval(variable + " = \"somevalue\""); // this will work, but please do not do it
alert(name_of_variable);
编辑:他只是注意到,通过简单地访问window
对象,一种更简单(更好)的方法就是:
window[variable] = "somevalue";
答案 4 :(得分:-3)
window['name_of_variable'] = 'somevalue';
或
eval('var ' + variable_name + ' = ' + variable_name + ';');
除此之外,不要这样做。变量变量永远不是一个好主意,并且当(总是)事情发生时,几乎不可能调试问题。