在PHP中我们可以这样做:
$variable = "name_of_variable";
$this->{$variable} = "somevalue";
Run Code Online (Sandbox Code Playgroud)
如何在javascript中执行此操作?
用例应该是这样的:
function Apple(){
var name = "variable_name";
this.(name) = "value";
}
console.log(new Apple());
Run Code Online (Sandbox Code Playgroud)
输出
[Apple: {variable_name:"value"}]
Run Code Online (Sandbox Code Playgroud)
zzz*_*Bov 11
尝试:
this[name] = "value";
Run Code Online (Sandbox Code Playgroud)
所有对象都可以使用点和数组表示法进行变量访问.
另请注意,这将允许您创建通过点表示法无法访问的名称值对:
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
Run Code Online (Sandbox Code Playgroud)
如果要创建新的对象文字,可以使用字符串文字作为具有特殊字符的值的名称:
var foo = {'bar-baz':'fizzbuzz'};
Run Code Online (Sandbox Code Playgroud)
但是您将无法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'
Run Code Online (Sandbox Code Playgroud)
因为其他的回答者都在提及eval,我将解释一个eval可能有用的案例.
eval是evil,谨慎行事.如果需要使用具有动态名称的变量,并且该变量在另一个对象上不存在.
重要的是要知道var foo在全局上下文中调用将新变量附加到全局对象(通常window).但是,在闭包中,由var foo仅在闭包的上下文中创建的变量存在,并且不附加到任何特定对象.
如果在闭包中需要动态变量名,最好使用容器对象:
var container = {};
container[foo] = 'bar';
Run Code Online (Sandbox Code Playgroud)
因此,与所有这样说,如果是一个动态的变量名需要和容器对象不能被使用,eval可以用来创建/访问/修改一个动态的变量名.
var evalString = ['var', variableName, '=', String.quote(variableValue), ';'].join(' ')
eval( evalString );
Run Code Online (Sandbox Code Playgroud)
您可以在Javascript中使用方括号表示法:
variable = "name_of_variable";
window[variable] = "somevalue";
Run Code Online (Sandbox Code Playgroud)
您可以使用Javascript中的任何对象执行此操作.
| 归档时间: |
|
| 查看次数: |
7128 次 |
| 最近记录: |