我不确定这是否可行,但是,有没有办法选择一个与字符串同名的对象,并在.each循环中使用它?
var test = "myobj";
var myobj = {"1" : "2", "2" : "3"};
function testing(test){
// If i do a console.log on the variale "test":
console.log(test); // will show the string: "myobj"
typeof(test); // is string
// somehow select the object with the name myobj, and maybe iterate through it?
jQuery.each(myobj, function(key, val){
alert(val); // right now this will alert the actual letters: m y o b j
});
}
答案 0 :(得分:2)
您可以使用以下字符串名称来处理对象属性:
obj["property"]
在您的示例中,您创建了test
全局,这是window
的属性(我假设您在浏览器中对此进行了测试):
window[myobj]
答案 1 :(得分:1)
如果变量是全局的
var test = "myobj";
var myobj = {"1" : "2", "2" : "3"};
console.log(window[test]);
请注意,如果您将代码放在$(function() { ... }); wrapper that
var test and
var myobj will not be global and therefore not available under the
window`对象中。
答案 2 :(得分:0)
正如其他答案所指出的那样,在您的示例中,如果您的window[test]
变量是全局变量,则可以使用myObj
。
但是,这不是你应该这样做的方式。据推测,您将拥有许多其他相关变量,如myobj2
,yetAnotherObj
等。否则,这样做没有多大意义。但是你不希望用这些变量弄乱你的全局命名空间。
相反,创建一个包含所有其他变量的对象:
var myObjects = {
myobj: {"1" : "2", "2" : "3"},
myobj2: {"4" : "5", "6" : "7"},
yetAnotherObj: {"8" : "9", "10" : "11"}
};
现在,如果你的test
变量中包含其中一个对象的名称,你可以使用:
myObjects[test]
这不仅可以避免使全局命名空间混乱,而且即使myObjects
及其中包含的对象是局部变量而不是全局变量,它也会起作用。