为什么这个对象未定义?

Thi*_*ago 0 javascript jquery

执行此代码时,Firebug显示错误:

$.ajax({
type: "GET",
url: "../foos/.....",
dataType: "json",
success: function (foos, textStatus, XMLHttpRequest) {
    for (var i = 0; i <= foos.length; i++) {
        var foo = foos[i];
        alert(foo.id);
    };
}});
Run Code Online (Sandbox Code Playgroud)

json返回带有id和name属性的var"foos".甚至警告foo.id属性,firebug显示错误:

alert(foo.id) //foo is undefined
Run Code Online (Sandbox Code Playgroud)

为什么foo在警报中正确显示时未定义?

编辑:我分配了两次foo,抱歉.但即使我不这样做,我也有同样的萤火虫错误.

Jam*_*iec 5

你想要哪个foo?数组中的foo(foos)或你在循环中重新声明的foo:

for (var i = 0; i <= foos.length; i++) {
    var foo = {
        id: "",
        name:""
    };

    var foo = foos[i];
    alert(foo.id);
 };
Run Code Online (Sandbox Code Playgroud)

但是,至关重要的是,这不是问题所在.问题是你循环0foos.length:

for (var i = 0; i <= foos.length; i++)
Run Code Online (Sandbox Code Playgroud)

这意味着在循环的最后一次迭代中,索引i比数组的最大索引大1.当您尝试读取此元素时,确实是未定义的.

您应该将循环更改为:

for (var i = 0; i < foos.length; i++)
Run Code Online (Sandbox Code Playgroud)

(当然,摆脱重新定义foo).

结果应该是:

for (var i = 0; i < foos.length; i++) {
    var foo = foos[i];
    alert(foo.id);
 };
Run Code Online (Sandbox Code Playgroud)