我在Javascript中从For Loop函数获取错误

时间:2011-10-28 11:19:32

标签: javascript

这是一个调用SELECT元素值的函数。但我面临一个错误。 代码在这里。

function get_s_val(){
var foo = all_categories_1;
var ov1 = "";

    for(m=0;m<=foo.length;m++){
        ov1 += foo[m].value+',';
    }

console.log(ov1);
var tme=setTimeout("get_s_val()", 1000);
}
get_s_val();

它显示错误,如"Uncaught TypeError: Cannot read property 'value' of undefined"

但是当我做一些小改变时,它会起作用..比如

function get_s_val(){
var foo = all_categories_1;
var ov1 = "";

    //for(m=0;m<=foo.length;m++){
        ov1 += foo[0].value+',';
    //}

console.log(ov1);
var tme=setTimeout("get_s_val()", 1000);
}
get_s_val();

我不知道编写代码我错了。

3 个答案:

答案 0 :(得分:2)

修改循环条件以在迭代器小于数组的长度时运行,或者当你在索引{{到达不存在的元素时'获得undefined 1}}:

foo.length

...并且总是使用for(var m=0;m<foo.length;m++){ ov1 += foo[m].value+','; } 关键字声明变量,否则会发生不好的事情,JSLint会抱怨它(这是正确的,但这是另一个主题)。

答案 1 :(得分:1)

function get_s_val(){
    var foo = all_categories_1;
    var ov1 = "";

        for(var m = 0; m < foo.length; m++){ // use var, and only loop from e.g.
                                             // 0 to 2 when the length is 3, so <,
                                             // not <=
            ov1 += foo[m].value+',';
        }

    console.log(ov1);

    setTimeout(get_s_val, 1000); // don't use a string, just pass the function.
                                 // Plus, the variable is nowhere accessible so
                                 // you can drop storing it
}

get_s_val();

无论如何,如果你只想将数组的元素加入到以,作为分隔符的字符串中,为什么不这样做:

console.log(foo.join());

答案 2 :(得分:0)

for循环的顶部,m<=foo.length;应该是m<foo.length;