для цикла неопределено «ошибка» - PullRequest
0 голосов
/ 11 мая 2018

Я пытаюсь сделать так, чтобы пустой массив записывал массив лет в цикле for. Годы проходят отлично, но я продолжаю получать undefined в конце консоли. Может кто-нибудь объяснить мне, почему это происходит?

P.S. Здесь разработчик-самоучка, поэтому, пожалуйста, потерпите меня, спасибо!

var empty = [];

var years = [1996, 1997, 2001, 1975, 1943];

for(var empty = 0; empty <= years.length; empty++) {
    console.log(years[empty]);
}

Ответы [ 4 ]

0 голосов
/ 11 мая 2018

Вы видите undefined, потому что вы перечисляете за длину массива.

-

Попробуйте этот новый синтаксис:

const years = [1996, 1997, 2001, 1975, 1943];

for(let year of years) {
    console.log(year);
}

Илифункциональный стиль, см. Array.prototype.map

years.map(year => console.log(year))
0 голосов
/ 11 мая 2018

array, где вы начинаете с индекса до 0 и повышаетесь до array's length один за другим. Допустим,

Var arr = ['a', 'b', 'c', 'd', 'e']

Теперь этот array содержит 5 elements. Ну, если вы начнете считать с 0, ваш fifth element index будет 4. Но в вашем loop вы нарушаете его, когда индекс равен 5. Поскольку в index 5 нет элемента, вы получаете ошибку undefined.

решение Там, где вы проверяете, равен ли индекс <=, замените его на <, так как при достижении индекса цикла равняется элементу общего числа в вашем массиве, который равен 5, он получает разрыв и выход.

0 голосов
/ 11 мая 2018

Вот решение:

var empty = [];

var years = [1996, 1997, 2001, 1975, 1943];

for(var empty = 0; empty < years.length; empty++) {
    console.log(years[empty]);
}

Вы сказали, что изучаете, посмотрите, почему индекс массивов начинается с 0.

0 голосов
/ 11 мая 2018

На последней итерации ваш empty === 5, поэтому 5 <= years.length === true, поэтому тело цикла for выполняется с console.log(years[5]), равным undefined, поскольку ключи массива основаны на 0, например, [0: 1996, 1: 1997, 2: 2001, 3: 1975, 4: 1943]

...