Ошибка после изменения let на const и изменения i ++ с i + 1 в цикле for - PullRequest
0 голосов
/ 15 декабря 2018

Я кодировал после отключения tslint некоторое время, и когда я включил его позже, я увидел некоторые ошибки и исправил их.

Из этого:

for (let index = 0; index < combinedUniqueIndexes.length; index++)

К этому:

for (const index = 0; index < combinedUniqueIndexes.length; index + 1)

Но после этого мой код просто падает!Понятия не имею, что я делаю не так!Пожалуйста, помогите этой бедной душе!

(Если кому-то нужен весь проект, я тоже могу дать это, просто спросите!)

Ответы [ 6 ]

0 голосов
/ 15 декабря 2018

У вас есть две ошибки во втором цикле for.

  1. Измените const index = 0 на let index = 0.const означает, что идентификатор не может быть переназначен, а let означает, что идентификатор может быть переназначен.

  2. Измените index + 1 на то, что вы имели до index++.index++ фактически означает index = index + 1, увеличивая index на 1 каждый раз, когда вы проходите цикл for.

Причиной сбоя было то, что каждый раз, когда цикл for менялся index, он не мог этого сделать, потому что const не позволял бы ему меняться.

0 голосов
/ 15 декабря 2018

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

for (let i=0; i < length; i++) { ... }

Я не рекомендую использовать var для объявления и инициализации индекса, потому что он будет существовать за пределами цикла.Как правило, let безопаснее, var может создавать трудно обнаруживаемые ошибки.

Однако, когда вы используете цикл for of или for in, может быть неплохо использовать константу:

for (const item of arr) { ... }

или ...

for (const key in obj) { ... }

С этим можно обойтись, поскольку в циклах for of и for in индекс инициализируется в начале каждой итерации.Только не забудьте использовать for in для итерации по строкам и массивам (упорядоченным структурам данных), потому что это может испортить порядок элементов (никогда не случалось со мной, но нет никаких гарантий, что это не произойдет).

0 голосов
/ 15 декабря 2018

Есть две вещи, которые не подходят для цикла

for (const index = 0; index < combinedUniqueIndexes.length; index + 1)
  1. Вы не можете изменить значение const.Не используйте const для счетчиков.
  2. index+1 вы не присваиваете обратно значение выражения назад для индекса.так что индекс всегда будет одинаковым.

Так что вы должны использовать код, подобный этому

for (let index = 0; index < combinedUniqueIndexes.length; index++)

Или

for (let index = 0; index < combinedUniqueIndexes.length; index += 1)

Или

for (let index = 0; index < combinedUniqueIndexes.length; index = index + 1)
0 голосов
/ 15 декабря 2018

Нельзя использовать константу для индекса for цикла.Цикл работает, увеличивая индексную переменную каждую итерацию, но вы не можете сделать это с константой.Вам нужно использовать let здесь.

Кроме того, вы изменили 3-ю часть цикла, чтобы фактически не изменять индекс, поэтому теперь ваш цикл выполняется вечно, он никогда не увеличивает индекс.

Вы должны вернуться к тому, что у вас было изначально.Какова ваша причина изменить это?

0 голосов
/ 15 декабря 2018

Вы не можете изменить значение const, поэтому увеличение его в случае сбоя .Вы должны использовать let вместо const для вашего итератора.См. MDN документы для const .

0 голосов
/ 15 декабря 2018
 index + 1

не изменяется index, ваш цикл бесконечен.Чтобы увеличить, сделайте

 index += 1
...