Каталог
Веб-разработка с нуля: четыре курса по порядку.
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Каталог
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Урок 62 из 114 · 10 мин
Протокол итераторов и Symbol.iterator, генераторы function*, yield, yield* и методы next, return, throw.
Почему массив можно перебрать for…of, а мой объект полки — нет?
Массив умеет отдавать итератор. Научим и полку — через Symbol.iterator или генератор.
[Symbol.iterator](), который возвращает итератор — объект с методом next(), отдающим { value, done }.const it = ["Блокнот", "Пенал"][Symbol.iterator]();
console.log(it.next(), it.next(), it.next());Symbol.iterator....const shelf = {
items: ["Блокнот", "Пенал"],
[Symbol.iterator]() { return this.items[Symbol.iterator](); }
};
console.log([...shelf]);function*function* numbers() {
yield 1;
yield 2;
}
console.log([...numbers()]);yieldnext(). next(x) передаёт x обратно как результат yield.function* orderIds() {
let id = 1040;
while (true) yield id++;
}
const ids = orderIds();
console.log(ids.next().value, ids.next().value);yield*yield* other по очереди отдаёт все значения другого перебираемого.function* coffee() { yield "Блокнот"; yield "Пенал"; }
function* shelf() { yield* coffee(); yield "Стикер"; }
console.log([...shelf()]);next() · return() · throw()next(v) — продолжить, return(v) — завершить досрочно, throw(e) — бросить ошибку в точку паузы.function* g() {
try { yield 1; yield 2; } finally { console.log("Уборка"); }
}
const it = g();
console.log(it.next());
console.log(it.return("стоп"));Нужна последовательность, которую считать заранее дорого или бесконечно, — пиши генератор.
Напиши генератор tickets(start), который бесконечно отдаёт номера start, start + 1, …, и сделай объект shelf перебираемым через [Symbol.iterator] (отдаёт элементы shelf.items).
Выберите один ответ.
Что делает yield?
Выберите один ответ.
Что значит { value: undefined, done: true } от итератора?
Проверяем состояние обучения…