Javascript 从它的名字创建变量

标签 javascript

在 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"}]

最佳答案

尝试:

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'};

但是您将无法在对象字面量中将变量用作,因为它们被解释为要使用的名称:

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 的代码是邪恶的,请谨慎行事。

如果您需要使用具有动态名称的变量,并且该变量在另一个对象上不存在。

重要的是要知道在全局上下文中调用 var foo 会将新变量附加到全局对象(通常是 window)。然而,在闭包中,由 var foo 创建的变量仅存在于闭包的上下文中,并不附加到任何特定对象。

如果在闭包中需要动态变量名,最好使用容器对象:

var container = {};
container[foo] = 'bar';

综上所述,如果需要动态变量名并且无法使用容器对象,则可以使用eval 来创建/访问/修改一个动态变量名。

var evalString = ['var', variableName, '=', String.quote(variableValue), ';'].join(' ')
eval( evalString );

关于Javascript 从它的名字创建变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7028035/

相关文章:

Javascript - 从字符串获取数组值

javascript - 动态创建的元素上的事件绑定(bind)?

javascript - PhoneGap 外部主机通配符

javascript - 使用 'instanceof function() {}' 的原因?

javascript - 关于使用 javascript 在具有相同 id 和类的所有复选框中设置具有特定值的复选框的问题

javascript - 使用 bootstrap-markdown 上传图像

javascript - JS函数定义: meaning of the last parentheses

javascript - 每个字母连接一个字符串

javascript - 如何在 AngularJS 中添加动态 div?

javascript - window.requestFileSystem 不工作