JavascriptのForループ関数からエラーが出ます

これは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();

it shows an error like "Uncaught TypeError: Cannot read property 'value' of undefined"

しかし、私はいくつかのlittelの変更を行うと、それは動作します..のように

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();

私はどこでコードを書くのが間違っているのか分かりません。

1
実際にall_categories_1は何ですか?
追加された 著者 Soundar Rathinasamy,
なぜループ変数に var を使用しないのですか?文字列を setTimeout に渡すのはなぜですか?
追加された 著者 ThiefMaster,
@soundar:all_categories_1はHTMLのSELECT要素です。
追加された 著者 Shahrukh,

3 答え

イテレータが配列の長さよりも小さいの間にループ条件を変更するか、インデックス undefined > foo.length :

for(var m=0;m

...そして常に var キーワードで変数を宣言するか、悪いことが起こります.JSLintはこれについて泣き言を言います(それはもう一つの話題です)。

2
追加された
配列のすべての要素を繰り返し処理する場合は、yesを指定します。配列の最初の要素はインデックス 0 にあるため、最後の要素は要素の総数 - 1 です。希望は分かります。
追加された 著者 karim79,
ありがとうございます。できます。しかし、1つのことを教えてください、 "= <"または "> ="間違ったものを使用してください。
追加された 著者 Shahrukh,
ああ、カリム、私はそのルールを知っている..しかし、私は今、どこに問題があるかを理解しています。どうもありがとう。
追加された 著者 Shahrukh,
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());
1
追加された
あなたの答えとjoin()関数のためのpimvdbに感謝します。
追加された 著者 Shahrukh,

At the top of the for loop, m<=foo.length; should instead be m.

0
追加された
私に答えてくれたHammeriteに感謝します。
追加された 著者 Shahrukh,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript