Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   for не присваивает значение (https://javascript.ru/forum/misc/51167-ne-prisvaivaet-znachenie.html)

lucky89 27.10.2014 11:42

for не присваивает значение
 
Здравствуйте!
Столкнулся с такой загадкой:
есть элемент cmIndex[0][0], в котором значение 'RUB'.
пишу:
console.log(cmIndex[0][0]); //Вывод, как надо 'RUB'

пишу в цикле:
var input={};
input.num=0;
for(var i=0;cmInputType!=cmIndex[i][0];i++){input.num++;}
//Ошибка: Uncaught TypeError: Cannot read property '0' of undefined

Ругается на [0]. То есть:
(var i=0;cmInputType!=cmIndex[i];i++) //Нет ошибки
(var i=0;cmInputType!=cmIndex[i][0];i++) //Есть ошибка

Приходится переписывать цикл так:
for(var i=0;cmIndex[i];i++){
if (cmInputType!=cmIndex[i][0]){input.num++;}else{break;}

Так длиннее и вложенность добавляется. Хочу, чтобы все красиво было. Почему в цикле for не получается присвоить элементу значение из подмассива? Как с этим бороться?

tsigel 27.10.2014 12:14

у вас не у всех cmIndex[i] есть [0]

MallSerg 27.10.2014 12:49

<script>
    function errorFunc () {
        !=[0]; // тут сокращенно твоя ошибка 
        alert ("test");
    }
</script>

<input type="button" onclick="errorFunc ();" value="алерт test не появится так как в скрипте ошибка">

</script>

Осталось узнать почему так =).

devote 27.10.2014 12:50

у вас не у всех cmIndex есть [i] а когда нет массива с индексом i тогда и вываливается ошибка, так как у undefined нет свойства [0]

devote 27.10.2014 12:52

for(var i = 0; cmIndex[i] && cmInputType != cmIndex[i][0]; i++) {input.num++;}

lucky89 27.10.2014 13:05

Цитата:

Сообщение от devote (Сообщение 337818)
у вас не у всех cmIndex есть [i] а когда нет массива с индексом i тогда и вываливается ошибка, так как у undefined нет свойства [0]

У всех есть, абсолютно точно. У меня массисв cmIndex содержит элементы от нулевого до 30. Каждый элемент является массивом содержащим по 4 элемента (от нулевого до 3).
У меня такое чувство, что такой синтаксис просто неприемлем для for. Как будто он отделяет cmIndex[i] от [0] и не понимает, к чему этот 0 вообще относится...
Конечно может я не прав... даже хотелось бы в это верить)

Или быть может беда происходит на 31-ом индексе? Такого элемента действительно уже нет, но я и написал cmInputType!=cmIndex[i][0] исходя из соображений, что на 31-ом индексе наткнусь на несуществующий элемент, получу false и цикл остановится. Может он тут вместо false мне ошибку выписывает?

MallSerg 27.10.2014 13:07

а что по твоему содержит 31й элемент массива?

devote 27.10.2014 13:29

Цитата:

Сообщение от lucky89
Или быть может беда происходит на 31-ом индексе?

именно так, интерпретатор не может найти элемент с индексом 0 у массива которого нет, то есть индекс 31 отсутствует, это и есть причина, что интерпретатор просто не может получить индекс 0 у переменной undefined. А это уже ошибка


Часовой пояс GMT +3, время: 21:59.