-1

我有一个 javascript 对象var flower_1; var flower_2;

我的问题是我是否有另一个变量,例如字符串var Name;

例如,让我们说:Name = "flower_1";

如何将Name变量更改为对象"flower_1"

4

2 回答 2

5

如果我正确理解你的问题,你有这样的事情:

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_1flower_2是对象的属性,您可以使用带括号[]的符号 ( ) 和字符串名称来访问这些属性。这是因为在 JavaScript 对象中,您可以使用点分符号和文字(例如,obj.foo)访问属性,或者使用括号符号和字符串(例如,obj["foo"])。在第二种情况下,字符串不必是字符串文字,它可以是表达式的结果,包括(如在本例中)从变量中检索字符串。

这是这两种技术的一个活生生的例子。

请注意,如果您的var语句是全局变量,那么这些变量将成为全局对象的属性,在 Web 浏览器上是window,因此如果它们是全局变量,您可以通过window[name]完全相同的原因访问它们objects[name]。但最好的做法是避免全局变量(如果可以的话,完全避免,或者只公开一个具有良好唯一名称的变量,然后在必要时包含所有公共内容 - 例如,如果外部代码需要访问您的内容)。

于 2011-11-22T11:01:28.150 回答
0

您可以使用以下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"
于 2011-11-22T10:58:08.717 回答