Jer*_*oen 11 html javascript jquery html5 node.js
下面的代码做我想要的,但我想避免eval
.Javascript中是否有一个函数通过字符串中定义的名称查找对象?
myobject = {"foo" : "bar"}
myname = "myobject";
eval(myname);
Run Code Online (Sandbox Code Playgroud)
一些上下文:我将它用于一个应用程序,其中dom中的大量节点具有html5 data-object
属性,该属性在处理程序函数中用于连接回模型.
编辑:myobject既不是全局也不是本地,它是在处理程序的一个父框架中定义的.
the*_*dox 17
如果变量是全局变量,则:
myobject = {"foo" : "bar"};
myname = "myobject";
window[myname].foo
Run Code Online (Sandbox Code Playgroud)
对于本地:
(function(){
myobject = {"foo" : "bar"};
myname = "myobject";
alert( this[myname].foo );
})();
Run Code Online (Sandbox Code Playgroud)
jef*_*eff 12
局部变量解决方案
您可以使用另一个对象的字符串属性创建要访问的所有对象.例如:
var objectHolder = {
myobject: {"foo" : "bar"},
myobject2: {"foo" : "bar"},
myobject3: {"foo" : "bar"}
};
Run Code Online (Sandbox Code Playgroud)
然后像这样访问您想要的对象:
var desiredObject = objectHolder["myobject"];
Run Code Online (Sandbox Code Playgroud)
全局变量解决方案
您可以使用如下字符串访问全局变量:
window["myobject"];
Run Code Online (Sandbox Code Playgroud)
小智 5
这个问题已经很老了,但由于它是 Google 上查询“javascript get object from string”的最高结果,我想我会分享一种使用点表示法获得更长对象路径的技术。
鉴于以下情况:
var foo = { 'bar': { 'alpha': 'beta' } };
Run Code Online (Sandbox Code Playgroud)
我们可以从这样的字符串中获取 'alpha' 的值:
var objPath = "bar.alpha";
var alphaVal = objPath.split('.')
.reduce(function (object, property) {
return object[property];
}, foo);
// alphaVal === "beta"
Run Code Online (Sandbox Code Playgroud)
如果是全局的:
window.foo = { 'bar': { 'alpha': 'beta' } };
Run Code Online (Sandbox Code Playgroud)
只需window
作为initialValue
for传递reduce
:
var objPath = "foo.bar.alpha";
var alphaVal = objPath.split('.')
.reduce(function (object, property) {
return object[property];
}, window);
// alphaVal === "beta"
Run Code Online (Sandbox Code Playgroud)
基本上我们可以reduce
通过将初始对象作为initialValue
.
Array.prototype.reduce 的 MDN 文章
归档时间: |
|
查看次数: |
26879 次 |
最近记录: |