Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.10.2014, 11:42
Интересующийся
Отправить личное сообщение для lucky89 Посмотреть профиль Найти все сообщения от lucky89
 
Регистрация: 27.10.2014
Сообщений: 16

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 не получается присвоить элементу значение из подмассива? Как с этим бороться?

Последний раз редактировалось lucky89, 27.10.2014 в 11:49.
Ответить с цитированием
  #2 (permalink)  
Старый 27.10.2014, 12:14
Профессор
Отправить личное сообщение для tsigel Посмотреть профиль Найти все сообщения от tsigel
 
Регистрация: 12.12.2012
Сообщений: 1,398

у вас не у всех cmIndex[i] есть [0]
Ответить с цитированием
  #3 (permalink)  
Старый 27.10.2014, 12:49
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

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

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

</script>

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

Последний раз редактировалось MallSerg, 27.10.2014 в 13:04.
Ответить с цитированием
  #4 (permalink)  
Старый 27.10.2014, 12:50
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

у вас не у всех cmIndex есть [i] а когда нет массива с индексом i тогда и вываливается ошибка, так как у undefined нет свойства [0]
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #5 (permalink)  
Старый 27.10.2014, 12:52
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

for(var i = 0; cmIndex[i] && cmInputType != cmIndex[i][0]; i++) {input.num++;}
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
  #6 (permalink)  
Старый 27.10.2014, 13:05
Интересующийся
Отправить личное сообщение для lucky89 Посмотреть профиль Найти все сообщения от lucky89
 
Регистрация: 27.10.2014
Сообщений: 16

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

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

Последний раз редактировалось lucky89, 27.10.2014 в 13:09.
Ответить с цитированием
  #7 (permalink)  
Старый 27.10.2014, 13:07
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

а что по твоему содержит 31й элемент массива?
Ответить с цитированием
  #8 (permalink)  
Старый 27.10.2014, 13:29
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от lucky89
Или быть может беда происходит на 31-ом индексе?
именно так, интерпретатор не может найти элемент с индексом 0 у массива которого нет, то есть индекс 31 отсутствует, это и есть причина, что интерпретатор просто не может получить индекс 0 у переменной undefined. А это уже ошибка
__________________
хм Russians say завтра but завтра doesn't mean "tomorrow" it just means "not today."
HTML5 history API рассширение для браузеров не поддерживающих pushState, replaceState
QSA CSS3 Selector Engine
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выводить значение раньше переменных Гробовщик Общие вопросы Javascript 11 10.09.2013 08:42
Не возможно выбрать другое значение BLP Events/DOM/Window 7 22.10.2012 17:22
не сохраняется значение переменной при событии cyberpunk Events/DOM/Window 2 21.09.2012 09:59
В contains() не подставляется значение переменной Heger jQuery 2 11.12.2011 20:26
Значение переменной salex009 jQuery 1 05.12.2011 16:55