Это пример со справочника learn.javascript, можете объяснить, что здесь происходит? Непонятна по сути не одна строчка.
Благодарю.
let str = "Hello";
let iterator = str[Symbol.iterator]();
while (true) {
let result = iterator.next();
if (result.done) break;
alert(result.value); // выводит символы один за другим
}
Разобрался САМ. Извините, но помощь больше не нужна.
Нужно было внимательно читать. Мы берем встроенную функцию-итератор из строки. Создаем бесконечный цикл, в нем вызываем метод итератора next, который совершает шаг итератора, - нам вернули объект. Если свойство done этого объекта == true, то мы прекращаем цикл (это происходит, когда мы прошлись по всей строке). Иначе выводим результат текущей итерации - value
Константин, сомневаюсь. Сначала тебе рассказали про итераторы и какие у них есть методы, а потом показали примеры встроенных итераторов. В следующий раз не просто пробегайся глазами, а выписывай вручную, чтобы всё понять.
Если помог, хорошим тоном будет отметить решением
Мне не совсем понятно, как next() работает в случае со строкой... Или у каждого символа строки есть индекс? Первая буква - 1 индекс, вторая - 2 индекс...
Ведь
Константин, то, что в отрезке кода - это пример итератора. В строке он совсем другой. Да, у каждого символа в строке есть индекс: 0 - первый, 1 - второй, 2 - третий и т.д., а итератор выглядит примерно так:
{ // string.prototype
[Symbol.iterator]() {
let i = 0;
return {
next() {
// this в экземпляре строки ссылается на саму строку
return (i < this.length) ? ({ value: this[i++] }) : ({ done: true });
// *Постфиксный инкремент сначала возвращает текущее значение,
// а потом увеличивает его на 1.
}
};
}
}
Anonymous Penguin, я попытался воссоздать то, что происходит под капотом, но оно не работает... Подскажите, что именно не так?
let str = "Hello";
let iterator = str[Symbol.iterator]() {
let i = 0;
return {
next() {
return (i < this.length) ? ({ value: this[i++] }) : ({ done: true })
}
}
};
while (true) {
let result = iterator.next();
if (result.done) break;
alert(result.value);
Константин, бл зачем ты это делаешь? Итератор в строке УЖЕ встроен по умолчанию. Я тебе просто показал, как выглядит итератор ПРИМЕРНО. Тебе нужно понимать, почему и зачем я так написал. Пройди учебник с самого начала, только внимательно. Да, это неудобно, но я тоже так делал и мне приходилось смириться с этим.
Я больше не собираюсь тратить время на объяснение того, что нужно было понять и так спустя пару дней