for循环不能处理对象

时间:2012-01-24 23:41:14

标签: javascript oop

所以我现在的功能非常简单......

setUpButtons: function(items) {
    console.log(typeof items); //Logs Object
    console.log(items); //Logs ["<li class="0">Click Me</li>", "<li class="1">Click Me Too</li>"]
        for(var index in items) {
            console.log(items[index]); //does not log
            console.log("HELLO"); //does not log
        }
}

我看不出我无法循环的原因。我已经尝试过$(items).each(function(),也没有输出。有什么想法吗?这是item对象的构建方式......

setButtons: function(type) {
    var that = this;
    var items = [];
    $.getJSON("button_list.php?type=" + type, function(data) {
        $.each(data.buttons, function(key, val) {
            console.log(items);
            items.push("<li class='" + key + "'>" + val + "</li>");
        });
        console.log(items);
    });
    that.buttons = items;
},

3 个答案:

答案 0 :(得分:3)

您在一个数组上使用for in,该数组没有要分配给index的属性,就像您在对象文字上进行迭代一样。

替换为:

for(var i = 0, len = items.length; i < len; i++){ 
    console.log(items[i]);
    console.log('HELLO');
}

答案 1 :(得分:0)

我认为你想要一个带有你所显示语法的“Foreach”......选项可能是

foreach (var x in items) {
  // do something with items[x]
}

for (var x = 0; x<items; x++) {
  // do something with items[x]
}

我认为你不能将两者结合起来

答案 2 :(得分:0)

添加到@EricWendelin,您可以尝试使用forEach:

var d = { 
setUpButtons: function(items) {
    console.log(typeof items); //Logs Object
    console.log(items); //Logs ["<li class="0">Click Me</li>", "<li class="1">Click Me Too</li>"]
    items.forEach(function(t) {
        console.log(t); 
    })
}  }
d.setUpButtons(['<li class="0">Click Me</li>', '<li class="1">Click Me Too</li>']);