无法读取未定义的属性“0”

时间:2013-12-31 13:32:45

标签: javascript jquery

我有一个加载并返回JSON项的网格。添加了一个单选按钮过滤器来过滤这些项目。每次选择单选按钮时,网格项都将刷新以显示符合过滤条件的项目。

那就是,当我点击单选按钮时,没有任何反应,我看到Cannot read property '0' of undefined错误。 JSON正确加载,没有任何404或500错误,我可以使用Chrome DevTools确认。违规行代码似乎是while (typeof n.main[l.toString()] != "undefined")。下面是包含所述代码的函数:

function j(n) {
var m = [],
    l;
if (n.main != "undefined") {
    l = 0;
    while (typeof n.main[l.toString()] != "undefined") {
        m.push(n.main[l.toString()]);
        l++
    }
}
if (GridApp.logging) {
    $.log(m.length + " talks loaded")
}
m = f(m);
m = GridMathFactory.applyGridMath(m);
GridModel.setTalkVOs(m);
d = e(d);
for (l = 0; l < d.length; l++) {
    d[l].talkIdx = l
}
    GridController.onTalksLoadSuccess()
}

以下是函数n的代码:

function n() {
if (GridApp.logging) {
    $.log("GridMathFactory.calculateSubColumns()")
}
var B = 0;
var A;
for (var z = 0; z < q.length; z++) {
    var y = columnScale - 1;
    if (t[y] < f.length) {
        A = g(q[z], B)
    }
    B += (A) ? k : k;
    if (GridApp.logging) {
        $.log("Just calculated column " + z + "; Contained 1 ? " + A)
        }
    }
}

2 个答案:

答案 0 :(得分:4)

if (n.main != "undefined") {

应该是:

if (n.main !== undefined) {

或:

if (typeof n.main != "undefined") {

答案 1 :(得分:1)

结果main是我正在调用的JSON中不存在的东西。删除它,现在它可以正常工作。

function j(n) {
var m = [],
    l;
if (n != "undefined") {
    l = 0;
    while (typeof n[l.toString()] != "undefined") {
        m.push(n[l.toString()]);
        l++
    }
}
if (GridApp.logging) {
    $.log(m.length + " talks loaded")
}
m = f(m);
m = GridMathFactory.applyGridMath(m);
GridModel.setTalkVOs(m);
d = e(d);
for (l = 0; l < d.length; l++) {
    d[l].talkIdx = l
}
    GridController.onTalksLoadSuccess()
}