Циклы
for
for (let i = 0; i < 5; i++) {
console.log(i);
}
Три части: инициализация, условие, шаг.
Обратный:
for (let i = 5; i > 0; i--) {
console.log(i);
}
while
let i = 0;
while (i < 5) {
console.log(i);
i++;
}
Проверяет условие до тела.
do...while
let i = 0;
do {
console.log(i);
i++;
} while (i < 5);
Проверяет условие после тела. Выполнится хотя бы раз.
for...of
Для итерации по массивам, строкам, Map, Set:
const items = ['a', 'b', 'c'];
for (const item of items) {
console.log(item);
}
for (const char of 'hello') {
console.log(char);
}
С индексом:
for (const [index, item] of items.entries()) {
console.log(index, item);
}
for...in
Для итерации по ключам объекта:
const user = { name: 'Алиса', age: 25 };
for (const key in user) {
console.log(key, user[key]);
}
Включает унаследованные свойства. Проверка:
for (const key in user) {
if (Object.hasOwn(user, key)) {
console.log(key);
}
}
Не используй for...in для массивов — порядок не гарантирован, попадут индекс-строки.
forEach
Метод массива:
const items = ['a', 'b', 'c'];
items.forEach((item, index) => {
console.log(index, item);
});
Нельзя прервать через break или return.
break
Прерывает цикл:
for (let i = 0; i < 10; i++) {
if (i === 5) break;
console.log(i); // 0, 1, 2, 3, 4
}
continue
Пропускает итерацию:
for (let i = 0; i < 10; i++) {
if (i % 2 === 0) continue;
console.log(i); // 1, 3, 5, 7, 9
}
Метки
Выход из вложенных циклов:
outer: for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (i === 1 && j === 1) break outer;
console.log(i, j);
}
}
Используется редко.
Итерация по объекту
Современные способы:
const user = { name: 'Алиса', age: 25 };
Object.keys(user).forEach((key) => console.log(key));
Object.values(user).forEach((value) => console.log(value));
Object.entries(user).forEach(([key, value]) => console.log(key, value));
for (const [key, value] of Object.entries(user)) {
console.log(key, value);
}
forEach vs for...of
for...of— можноbreak,continue,awaitforEach— нельзя прерватьfor...ofбыстрее в большинстве случаев
Бесконечные циклы
while (true) {
// обязательно break внутри
if (condition) break;
}
Или:
for (;;) {
if (condition) break;
}
Итоги
for— когда нужен счётчикwhile— когда условие заранее известноfor...of— для массивов, строк, коллекцийfor...in— для ключей объектаforEach— короткая итерация без breakbreakиcontinueдля управления