Skip to main content

for...in VS for...of у масиві

Різниця між for...in і for...of у JavaScript - одна з тих речей, які потрібно чітко розуміти, особливо під час роботи з масивами.


Стисло:

ЦиклЩо перебираєВикористовується для
for...inКлючі / індекси (імена властивостей об'єкта)об'єктів
for...ofЗначення елементів (з ітерованих об'єктів)масивів, рядків, Set, Map тощо

Приклад 1 - масив

javascript
const arr = ["a", "b", "c"];

for...in - перебирає індекси (ключі):

javascript
for (const index in arr) { console.log(index); // "0", "1", "2" }
  • Повертає рядкові індекси (не числа!).
  • Підходить для об'єктів, а не масивів.
  • Може захопити додаткові властивості, якщо їх додати вручну.

for...of - перебирає значення:

javascript
for (const value of arr) { console.log(value); // "a", "b", "c" }
  • Працює з ітерованими об'єктами (Array, String, Set, Map...).
  • Повертає значення елементів.
  • Ідеальний для масивів.

Приклад 2 - відмінність на практиці:

javascript
const arr = ["x", "y", "z"]; arr.custom = "hello"; // додамо властивість вручну for (const key in arr) { console.log(key); // "0", "1", "2", "custom" } for (const value of arr) { console.log(value); // "x", "y", "z" }

for...in обходить усі перелічувані властивості об'єкта, включно з доданими вручну. for...of - лише елементи масиву.


Приклад 3 - робота з рядком (ітерований об'єкт)

javascript
for (const char of "JS") { console.log(char); // "J", "S" }

for...of чудово працює з рядками. for...in для рядка поверне індекси "0", "1".


Коротко:

Особливістьfor...infor...of
Перебираєключі (індекси, властивості)значення
Працює зоб'єктами, масивамиітерованими об'єктами (масив, рядок, Set, Map)
Повертаєрядки - імена властивостейреальні значення
Порядокможе бути непередбачуванимзберігає порядок
Підходить для масивівНіТак
Підходить для об'єктівТакНі

Запам'ятай просто:

for...in → перебирає ключі (для об'єктів) for...of → перебирає значення (для масивів та ітерованих об'єктів)

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.