Spec-Zone.ru › JavaScript

Iterator.from()

Базовая линия Недавно доступно

Эта функция работает на самых современных устройствах и версиях браузеров. Эта функция может не работать на старых устройствах или версиях браузеров. Она доступна во всех браузерах с марта 2025 года.

Статический метод Iterator.from() создает новый объект Iterator из объекта-итератора или итерируемого объекта.

Синтаксис

Iterator.from(object)

Параметры

object
Объект, реализующий протокол iterable или протокол iterator.

Возвращаемое значение

Если object является итерируемым объектом, вызывается его метод [Symbol.iterator]() для получения итератора. В противном случае предполагается, что object является итератором. Если итератор уже является instanceof Iterator (что означает, что он имеет Iterator.prototype в своей цепочке прототипов), он возвращается напрямую. В противном случае создается новый объект Iterator, который оборачивает исходный итератор.

Описание

Этот метод существует для преобразования пользовательских итераторов, вероятно, экспортируемых библиотеками, в надлежащие итераторы. Все объекты-итераторы, возвращаемые Iterator.from(), наследуются от общего объекта прототипа, который имеет следующие методы:

next()
Вызывает метод next() нижележащего итератора и возвращает результат.
return()
Вызывает метод return() нижележащего итератора и возвращает результат, или возвращает { value: undefined, done: true }, если у нижележащего итератора нет метода return().

Примеры

Преобразование итерируемого объекта в надлежащий итератор

Поскольку obj уже является итерируемым объектом, который возвращает надлежащий итератор при вызове его метода [Symbol.iterator](), Iterator.from(obj) возвращает тот же итератор.

const iterator = (function* () {
  yield 1;
  yield 2;
  yield 3;
})();

const obj = {
  [Symbol.iterator]() {
    return iterator;
  },
};

const iterator2 = Iterator.from(obj);
console.log(iterator2 === iterator); // true

Поскольку obj2 является итерируемым объектом, который возвращает ненадлежащий итератор при вызове его метода [Symbol.iterator](), Iterator.from(obj2) возвращает новый итератор, который оборачивает исходный итератор.

const iterator = {
  current: 0,
  next() {
    return { value: this.current++, done: false };
  },
};

const obj2 = {
  [Symbol.iterator]() {
    return iterator;
  },
};

const iterator2 = Iterator.from(obj2);
console.log(iterator2 === iterator); // false
console.log(iterator2.next()); // { value: 0, done: false }
console.log(iterator.next()); // { value: 1, done: false }

Преобразование итератора в надлежащий итератор

Поскольку obj уже является надлежащим итератором, Iterator.from(obj) возвращает сам себя.

const obj = (function* () {
  yield 1;
  yield 2;
  yield 3;
})();

const iterator = Iterator.from(obj);
console.log(iterator === obj); // true

Поскольку obj2 является ненадлежащим итератором, Iterator.from(obj2) возвращает новый итератор, который оборачивает исходный итератор.

const obj2 = {
  current: 0,
  next() {
    return { value: this.current++, done: false };
  },
};

const iterator = Iterator.from(obj2);
console.log(iterator === obj2); // false
console.log(iterator.next()); // { value: 0, done: false }
console.log(obj2.next()); // { value: 1, done: false }

Спецификации

Спецификация
Спецификация языка ECMAScript® 2027
# sec-iterator.from

Совместимость с браузерами

Настольные компьютеры Мобильные устройства Сервер
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on iOS Samsung Internet WebView Android WebView on iOS Bun Deno Node.js
from
122
117–119
122
117–119
131
108
103–105
18.4
122
117–119
131
81
78–79
18.4
26.0
24.0–25.0
122
117–119
18.4
1.1.31
1.39
22.0.0

См. также

  • Polyfill of Iterator.from in core-js
  • es-shims polyfill of Iterator.from
  • Iterator
  • Array.from()

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Iterator/from

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API