javascript-字符串到真实对象

javascript-字符串到真实对象,javascript,javascript-objects,object-reference,Javascript,Javascript Objects,Object Reference,我有一个javascript对象var flower\u 1;变种花2 我的问题是我是否有另一个变量,例如字符串var Name 比如说:Name=“flower\u 1” 如何将Name变量更改为对象“flower\u 1”您可以使用eval()函数: var flower_1 = "abc"; var name = "flower_1"; var x = eval(name); // = "abc" 但值得注意的是,使用eval()函数并不是最佳做法,应该不惜一切代价避免 一个更好的(也

我有一个javascript对象
var flower\u 1;变种花2

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

比如说:
Name=“flower\u 1”

如何将
Name
变量更改为对象
“flower\u 1”
您可以使用
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"

如果我没弄错你的问题,你有这样的问题:

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
在新语言中是不允许的(strict mode带来的许多改进之一)

在这种特殊情况下,很容易避免:

function foo() {
    var objects = {
        flower_1: { /* ... */ },
        flower_2: { /* ... */ }
    };
    var name = "flower_1";

    var target = objects[name];
}
现在,
flower\u 1
flower\u 2
是对象的属性,您可以使用带括号的符号(
[]
)和字符串名称来访问这些属性。这是因为在JavaScript对象中,可以使用点符号和文字(例如,
obj.foo
)访问属性,也可以使用括号符号和字符串(例如,
obj[“foo”]
)。在第二种情况下,字符串不必是字符串文字,它可以是表达式的结果,包括(在本例中)从变量检索字符串


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

很难说出您在这里要问什么。如果你能发布真实的代码(即使它不太管用),这将大大改善情况。现在甚至很难分辨字符串中有什么和没有什么(
===>
不是如何引用字符串)。尝试使用eval(),尽管我不太明白为什么要这样做。尝试另一种设计模式。嘿,伙计!这是一个很好的问题,只是有点难看。请投票!不使用阵列功能时,不要使用阵列。您只需要一个对象,
var obj={};obj.flower_1=“abc”所有JavaScript对象都是映射(AKA“关联数组”),但是我避免这个术语因为它是误导性的。请考虑我在JavaScript对象上的学习。不错的答案。别忘了在strinct模式下不推荐使用eval@是的,我应该提到这一点(现在我已经提到了)。:-)