← Назад к вопросам

Что такое итерабельный объект?

1.7 Middle🔥 141 комментариев
#JavaScript Core

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Итерабельный объект (Iterable) в JavaScript

Итерабельный объект — это объект, который реализует протокол итерации, то есть предоставляет способ последовательного доступа к своим элементам через специальный метод. Этот протокол является фундаментальной частью современного JavaScript и позволяет объектам быть "перебираемыми" в циклах for...of, использоваться в операторах spread (...) и работать с конструкциями, ожидающими последовательности данных.

Основные требования протокола Iterable

Чтобы объект стал итерабельным, он должен реализовать метод с ключом Symbol.iterator. Этот метод должен возвращать итератор — объект с методом next(). Метод next() возвращает объект с двумя свойствами:

  • value — текущее значение последовательности.
  • done — булевое значение, указывающее, завершена ли итерация.
// Пример создания простого итерабельного объекта
const myIterable = {
  data: [1, 2, 3],
  [Symbol.iterator]() {
    let index = 0;
    const data = this.data;
    
    return {
      next() {
        if (index < data.length) {
          return { value: data[index++], done: false };
        }
        return { done: true };
      }
    };
  }
};

// Использование в цикле for...of
for (const item of myIterable) {
  console.log(item); // 1, 2, 3
}

Встроенные итерабельные объекты в JavaScript

JavaScript предоставляет множество нативных итерабельных объектов:

  • Массивы (Array) и типизированные массивы (TypedArray).
  • Строки (String) — итерация по символам.
  • Map и Set.
  • Генераторы (Generator) — функции-генераторы автоматически возвращают итерабельные объекты.
  • DOM коллекции, такие как NodeList.
// Примеры использования встроенных итерабелей
const array = [10, 20, 30];
for (const num of array) {
  console.log(num); // 10, 20, Блок кода30
}

const string = "abc";
for (const char of string) {
  console.log(char); // 'a', 'b', 'c'
}

const mySet = new Set([1, 2, 3]);
for (const item of mySet) {
  console.log(item); // 1, 2, 3
}

Практическое применение итерабельных объектов

Итерабельные объекты широко используются в современном JavaScript:

  • Цикл for...of — основной способ итерации без управления индексами.
  • Оператор spread (...) — для преобразования итерабельного объекта в массив или для объединения элементов.
  • Деструктуризация массива — также работает с любыми итерабельными объектами.
  • Методы Array.from() — создание массива из итерабельного объекта.
  • Совместимость с библиотеками и API, которые ожидают последовательности данных.
// Spread оператор с итерабельным объектом
const iterable = [1, 2, 3];
const newArray = [...iterable, 4, 5]; // [1, 2, 3, 4, 5]

// Деструктуризация
const [first, second] = iterable; // first = 1, second = 2

// Array.from
const fromIterable = Array.from(iterable); // [1, 2, 3]

// Генераторы как итерабельные объекты
function* numberGenerator() {
  yield 1;
  yield 2;
  yield 3;
}

for (const num of numberGenerator()) {
  console.log(num); // 1, 2, 3
}

Итераторы и итерабельные объекты: ключевые различия

Важно понимать разницу между итерабельным объектом и итератором:

  • Итерабельный объект имеет метод Symbol.iterator, возвращающий новый итератор.
  • Итератор — объект с методом next(), непосредственно управляющий итерацией.
  • Итератор сам может быть итерабельным (обычно возвращает себя из Symbol.iterator), что позволяет использовать его в for...of.

Заключение

Итерабельные объекты образуют унифицированный протокол для работы с последовательностими данных в JavaScript, заменяя множественные способы итерации из прошлых версий языка. Их поддержка встроенными типами данных и возможность реализации для пользовательских объектов делают JavaScript более выразительным и удобным для обработки коллекций. Понимание этого механизма критически важно для эффективного использования современных API, асинхронных итераторов (async iterables) и функциональных подходов в разработке.

Что такое итерабельный объект? | PrepBro