有没有办法选择与字符串同名的对象

时间:2013-06-15 18:29:41

标签: jquery

我不确定这是否可行,但是,有没有办法选择一个与字符串同名的对象,并在.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
         });

    }

3 个答案:

答案 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

但是,这不是你应该这样做的方式。据推测,您将拥有许多其他相关变量,如myobj2yetAnotherObj等。否则,这样做没有多大意义。但是你不希望用这些变量弄乱你的全局命名空间。

相反,创建一个包含所有其他变量的对象:

var myObjects = {
    myobj: {"1" : "2", "2" : "3"},
    myobj2: {"4" : "5", "6" : "7"},
    yetAnotherObj: {"8" : "9", "10" : "11"}
};

现在,如果你的test变量中包含其中一个对象的名称,你可以使用:

myObjects[test]

这不仅可以避免使全局命名空间混乱,而且即使myObjects及其中包含的对象是局部变量而不是全局变量,它也会起作用。