下面的代码符合我的要求,但我想避免使用eval
。 Javascript中是否有一个函数按字符串中的名称查找对象?
myobject = {"foo" : "bar"}
myname = "myobject";
eval(myname);
某些上下文:我将此用于一个应用程序,其中dom中的大量节点具有html5 data-object
属性,该属性在处理函数中用于连接回模型。
编辑:myobject既不是全局的也不是本地的,它是在处理程序的一个父框架中定义的。
答案 0 :(得分:15)
如果变量是全局的,那么:
myobject = {"foo" : "bar"};
myname = "myobject";
window[myname].foo
<强> DEMO 强>
对于本地:
(function(){
myobject = {"foo" : "bar"};
myname = "myobject";
alert( this[myname].foo );
})();
<强> DEMO 强>
答案 1 :(得分:12)
本地变量解决方案:
您可以使用另一个对象的字符串属性创建要访问的所有对象。例如:
var objectHolder = {
myobject: {"foo" : "bar"},
myobject2: {"foo" : "bar"},
myobject3: {"foo" : "bar"}
};
然后像这样访问您想要的对象:
var desiredObject = objectHolder["myobject"];
全局变量解决方案:
您可以使用如下字符串访问全局变量:
window["myobject"];
答案 2 :(得分:3)
因为window是全局命名空间,所以你可以简单地使用
window[myname]
答案 3 :(得分:2)
这个问题已经过时了,但由于它是Google搜索查询的最佳结果,因此javascript从字符串&#34;获取对象,我以为我会分享更长对象的技术使用点表示法的路径。
鉴于以下内容:
var foo = { 'bar': { 'alpha': 'beta' } };
我们可以获得&#39; alpha&#39;来自这样的字符串:
var objPath = "bar.alpha";
var alphaVal = objPath.split('.')
.reduce(function (object, property) {
return object[property];
}, foo);
// alphaVal === "beta"
如果它是全球性的:
window.foo = { 'bar': { 'alpha': 'beta' } };
只需将window
作为initialValue
的{{1}}传递:
reduce
基本上我们可以使用var objPath = "foo.bar.alpha";
var alphaVal = objPath.split('.')
.reduce(function (object, property) {
return object[property];
}, window);
// alphaVal === "beta"
来遍历对象成员,方法是将初始对象作为reduce
传递。