Загрузка...
Загрузка...
Продолжая работу с платформой, вы принимаете условия Политики конфиденциальности и использование файлов cookie.
Symbol.iterator — это специальный символ, используемый в JavaScript для создания итерируемых объектов, то есть таких, которые можно перебирать с помощью for...of, оператора расширения (...), или использовать в других случаях, где требуется итерируемый интерфейс.
Объекты, у которых определён метод с ключом Symbol.iterator, считаются итерируемыми. Это:
[]"hello"SetMapargumentsconst arr = [1, 2, 3];
for (const value of arr) {
console.log(value); // 1, 2, 3
}
Здесь arr[Symbol.iterator] автоматически вызывается в for...of.
Метод Symbol.iterator должен возвращать объект итератора, у которого есть метод next().
Этот метод возвращает объект с двумя свойствами:
value — текущее значениеdone — булево, указывает завершен ли переборconst customIterable = {
data: [10, 20, 30],
[Symbol.iterator]() {
let index = 0;
return {
next: () => {
if (index < this.data.length) {
return { value: this.data[index++], done: false };
} else {
return { done: true };
}
}
};
}
};
for (const num of customIterable) {
console.log(num); // 10, 20, 30
}
const obj = { a: 1, b: 2 };
for (const key of obj) {
// TypeError: obj is not iterable
}
Объекты по умолчанию не являются итерируемыми, потому что у них нет метода [Symbol.iterator].
Чтобы сделать объект итерируемым, нужно явно определить этот метод.
for...ofspread (...)Array.from()Promise.allSetMapдеструктуризация: [...something]Symbol.iterator — ключ к итерируемости.[Symbol.iterator], можно использовать в for...of.Факт:
Именно Symbol.iterator делает возможной работу таких конструкций как for...of, ...spread, и даже yield* в генераторах.