Зачем нужен оператор continue в JavaScript?
Тут в целом речь идёт о циклах, пошаговых итерациях и условиях. Представьте, что вы бегаете по массиву с объектами и производите разные манипуляции с ними. Например вы преобразовываете объекты, добавляя свойство P со значением V. Что вы будете делать, когда ваш цикл дойдёт до объекта с уже существующим свойством P, но другим значением V1? Вы перепишете значение? Вы перепишите свойство? Вы сложите значения между собой и добавите к одному свойству?
Вопросов масса, но в ряде случаев вы просто захотите перейти к следующей итерации цикла без каких-либо действий. Вот для этих задач и нужен оператор continue
. Он позволяет пропустить итерацию цикла и перейти к следующей.
Пример для понимания
Есть массив с автомобилями:
var cars = [ {brand:"BMW"}, {brand:"Volvo"}, {brand:"Audi", speed: 222}, {brand:"Ford"}, {brand:"Mazda"} ]
Нужно всем автомобилям проставить свойство speed, со значением 99. Если свойство speed встречается у объекта, тогда не преобразовывать и оставлять как есть.
for(i=0; i<cars.length; i++){ if(cars[i].hasOwnProperty("speed")){ continue; }else{ cars[i].speed = 99; } }
Идея заключается в том, что мы пропустим проход по элементу с брендом Audi т. к. у него уже есть свойство speed. Мы добавим свойство speed к Volvo, а потом будет добавлено свойство к Ford.

Зарезервированное слово continue
Слово «continue» является зарезервированным словом в JavaScript. Это значит, что его нельзя использовать для именования переменных. Пример:

Тип спецификации записи о завершении
Тип Завершения (Completion type) — это Запись, используемая для объяснения распространения значений и потока управления во время выполнения, например поведения операторов (break
, continue
, return
и throw
), которые выполняют нелокальную передачу управления.
Значения типа «Завершение» — это значения записей, поля которых определены в таблице 9. Такие значения называются «Записями Завершения» (Completion Records).
Field Name (Имя Поля) | Value (Значение) | Meaning (Смысл) |
---|---|---|
[[Type]] | Одно из normal , break , continue , return , throw |
Тип произошедшего завершения. |
[[Value]] | любое значение языка ECMAScript или empty | Значение, которое было произведено. |
[[Target]] | любая строка ECMAScript или empty | Целевая метка для направленных передач управления. |
Таблица 9: Поля записи о Завершении
Термин «внезапное завершение» (abrupt completion) относится к любому завершению со значением [[Type]], отличным от нормального normal
.
Синтаксис оператора continue
ContinueStatement [Yield, Await] :
continue ;
continue [не LineTerminator здесь] LabelIdentifier [?Yield, ?Await] ;
Статическая семантика: Ранние Ошибки
continue ;
continue LabelIdentifier ;
- Это синтаксическая ошибка, если этот ContinueStatement не вложен, прямо или косвенно (но не пересекает границы функции), в IterationStatement.
Семантика времени выполнения: Оценка
ContinueStatement : continue ;
1. Вернуть Completion { [[Type]]:continue
, [[Value]]:empty
, [[Target]]:empty
}.
ContinueStatement : continue LabelIdentifier ;
1. Пусть label будет StringValue из LabelIdentifier. 2. Вернуть Completion { [[Type]]:continue
, [[Value]]:empty
, [[Target]]: label }.
Информационные ссылки
Что такое внезапное завершение? (abrupt completion)
Зарезервированные слова (ReservedWord)
Стандарт ECMAScript — Раздел «12.6.2 Keywords and Reserved Words» — https://tc39.es/ecma262/#prod-ReservedWord
Стандарт ECMAScript — Раздел «14.8 The continue Statement» — https://tc39.es/ecma262/#sec-continue-statement
Стандарт ECMAScript — Раздел «14.9 The break Statement» — https://tc39.es/ecma262/#sec-break-statement
Стандарт ECMAScript — Раздел «14.10 The return Statement» — https://tc39.es/ecma262/#sec-return-statement
Стандарт ECMAScript — Раздел «14.14 The throw Statement» — https://tc39.es/ecma262/#sec-throw-statement