我有一个 javascript 对象var flower_1; var flower_2;
我的问题是我是否有另一个变量,例如字符串var Name;
例如,让我们说:Name = "flower_1";
如何将Name
变量更改为对象"flower_1"
我有一个 javascript 对象var flower_1; var flower_2;
我的问题是我是否有另一个变量,例如字符串var Name;
例如,让我们说:Name = "flower_1";
如何将Name
变量更改为对象"flower_1"
如果我正确理解你的问题,你有这样的事情:
function foo() {
var flower_1 = { /* ... */ };
var flower_2 = { /* ... */ };
var name = "flower_1";
var target = /* code here to get the correct object based on `name` */;
}
您可以这样做,但应尽可能避免:
var target = eval(name);
eval
是一个非常大且容易被滥用的工具,应该并且可以避免。在几年的 JavaScript 开发中,我从来没有在生产代码中使用过它。另请注意,该语言的新“严格”模式eval
是不允许的(严格模式带来的众多改进之一)。
在这种特殊情况下,很容易避免:
function foo() {
var objects = {
flower_1: { /* ... */ },
flower_2: { /* ... */ }
};
var name = "flower_1";
var target = objects[name];
}
现在,flower_1
和flower_2
是对象的属性,您可以使用带括号[]
的符号 ( ) 和字符串名称来访问这些属性。这是因为在 JavaScript 对象中,您可以使用点分符号和文字(例如,obj.foo
)访问属性,或者使用括号符号和字符串(例如,obj["foo"]
)。在第二种情况下,字符串不必是字符串文字,它可以是表达式的结果,包括(如在本例中)从变量中检索字符串。
请注意,如果您的var
语句是全局变量,那么这些变量将成为全局对象的属性,在 Web 浏览器上是window
,因此如果它们是全局变量,您可以通过window[name]
完全相同的原因访问它们objects[name]
。但最好的做法是避免全局变量(如果可以的话,完全避免,或者只公开一个具有良好唯一名称的变量,然后在必要时包含所有公共内容 - 例如,如果外部代码需要访问您的内容)。
您可以使用以下eval()
功能:
var flower_1 = "abc";
var name = "flower_1";
var x = eval(name); // = "abc"
值得注意的是,使用该eval()
功能并不是最佳实践,应不惜一切代价避免使用。
更好(并且更推荐)的解决方案是使用关联数组:
var name = "flower_1";
var arr = new Array();
arr["flower_1"] = "abc";
var x = arr[name]; // = "abc"