Код на Java script не работает

326
03 мая 2017, 10:57

Здравствуйте. Подскажите, пожалуйста, почему такой код выдает ошибку:

Uncaught TypeError: Cannot read property 'indexOf' of undefined at script.js:21

var input = 'javascript is awesome';
var output = input.split('');
for(var i = 0; i <= output.length; i++) {
if(output[i].indexOf('a') != -1) {
    output[i] = '4';
} else if (output[i].indexOf('e') != -1) {
    output[i] = '3';
} else if (output[i].indexOf('o') != -1) {
    output[i] = '0';
}
}
output.join('');
alert(output);
Answer 1

Нужно не так:

i <= output.length;

а так:

i < output.length;

Потому что отсчет ведется с нуля и в итоге получается вы выходите за границы массива на 1 символ.

Answer 2

(var i = 0; i <= output.length; i++) - тут проблема, а именно в <=. Вы от первого элемента 0, до элемента output.length. Так как отсчет начинатся с 0, то элемента с индексом output.length не существует. Используйте <

var input = 'javascript is awesome'; 
var output = input.split(''); 
for(var i = 0; i < output.length; i++) { 
  if(output[i].indexOf('a') != -1) { 
      output[i] = '4'; 
  } else if (output[i].indexOf('e') != -1) { 
      output[i] = '3'; 
  } else if (output[i].indexOf('o') != -1) { 
      output[i] = '0'; 
  } 
} 
output.join(''); 
alert(output);

Answer 3

Кроме неверного условия цикла(что уже было указано в соседних ответах), в вашем коде есть еще, как минимум одна проблема:

output.join('');

не меняет значение переменной output (как вам почему то кажется), а возвращает новое значение-строку.

По-хорошему, вместо вашего "страшненького" цикла, можно использовать одну единственную функцию Array.prototype.map:

var input = 'javascript is awesome';
var output = input.split('').map(function (char) {
    switch (char) {
        case 'a':
            return 4;
        case 'e':
            return 3;
        case 'o':
            return 0;
        default:
            return char;
    }
}).join('');
alert(output);

А вот и рабочий пример на JSFiddle.

READ ALSO
Нужна помощь с jQuery скриптом

Нужна помощь с jQuery скриптом

Никак не могу додумать как по повторному клику по блоку возвращать все это дело в исходное состояние

366
Как внедрить css и js на чужой сайт

Как внедрить css и js на чужой сайт

Собственно вопрос в заголовкеНапример нужно добавить

328
Событие по клику на строке &lt;tr&gt;

Событие по клику на строке <tr>

Есть таблица, вот кусок:

329
Построить график из JSON данных Morris.js

Построить график из JSON данных Morris.js

ЗдравствуйтеМожет кто-нибудь подскажет как построить график, ибо строиться некорректно

499