Я атрымліваю памылку з Для функцыі Loop ў Javascript

гэта функцыя для выкліку выбару значэнняў элементаў. але я сутыкнуўся памылка. код тут.

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, крыніца
Чаму б вам не выкарыстоўваць Невялікі для зменнай цыклу, чаму вы перадаеце радок SetTimeout ?
дададзена аўтар ThiefMaster, крыніца
@soundar: all_categories_1 з'яўляецца элементам HTML SELECT.
дададзена аўтар Shahrukh, крыніца

3 адказы

Зменіце ўмова цыкла для запуску ў той час як итератор менш даўжыня масіва, ці вы атрымаеце не вызначана , калі вы патрапілі ў неіснуючы элемент з індэксам <�код > foo.length :

for(var m=0;m

... і заўсёды аб'яўляць зменныя з вар ключавое слова або дрэнныя рэчы будуць адбывацца, і JSLint будзе ныць пра гэта (і гэта правільна, але гэта іншая тэма).

2
дададзена
Калі вы хочаце перабраць усе элементы масіва, то так. Першы элемент масіва мае індэкс 0 , так што апошні элемент у агульная колькасць элементаў - 1 . Спадзяюся, што гэта ясна.
дададзена аўтар karim79, крыніца
Дзякуючы Karim. гэта працуе. але скажыце мне 1 рэч, гэта «= <�» або «> =» няправільна, што трэба выкарыстоўваць.
дададзена аўтар Shahrukh, крыніца
Yeh Карым, я ведаю, што правіла .. але я толькі цяпер разумею, што там, дзе была праблема. вялікі дзякуй.
дададзена аўтар 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
дададзена
Дзякуй pimvdb за ваш адказ і далучыцца() функцыі.
дададзена аўтар Shahrukh, крыніца

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

0
дададзена
Дзякуючы Hammerite для адказу на мяне.
дададзена аўтар Shahrukh, крыніца