Какой смысл от for of когда есть for in?

Какой смысл от новой конструкции for of, когда for in так же перебирает объект?
  • Вопрос задан
  • 3903 просмотра
Решения вопроса 4
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Прежде чем задавать подобные вопросы, было бы неплохо ознакомиться с предметом
frontender.info/es6-in-depth-iterators-and-the-for...
Глядишь, и вопрос бы отпал сам собой...
Ответ написан
Комментировать
evgeniy8705
@evgeniy8705
Повелитель вселенной
// Новый синтаксис добавлен для перебора итерируемых коллекций. Можете написать свою коллекцию с реализацией итератора и использовать for..of для ее перебора.

let arr = [`a`, `b`, `c`, `d`, `e`];

for (elem in arr) {
	console.log(elem); // 0 1 2 3 4
}

for (elem of arr) {
	console.log(elem); // a b c d e
}

for (let iter = arr[Symbol.iterator]; iter.done;) {
	console.log(iter.next()); // a b c d e
}
Ответ написан
Комментировать
@Alecxandrys
for..in перебирает все свойства объекта, которые тот имеет. Унаследованные от прототипа или присвоенные уже данному экземпляру-неважно. Соответственно на каждый элемент необходимо вызывать проверку hasOwnProperty, чтоб отсеять свойства прототипа и проверку содержимого, ибо к примеру для массива свойство length тоже попадет в цикл, и не отсеется предыдущей проверкой.

for..of является неявным итератом, который перебирает именно присвоенные свойства объекта, не захватывая наследованные и другие поля, что делает значительно более удобным
Ответ написан
AlexXYZ
@AlexXYZ
O Keep Clear O
У них параметры обработки объекта не соответствуют друг другу. В for есть step и его величина. В for_in нет. К тому же в for можно пройти массив в обратном направлении (сделать отрицательный step). Ну и кроме всех этих сравнений, если объект не массив, то как вы собираетесь применить на нём for? (или вы ошиблись и имели в виду только массив?) Такая же ситуация и с forEach. Только ещё хуже - нельзя сделать break.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
30 нояб. 2022, в 00:04
1000 руб./за проект
29 нояб. 2022, в 23:48
300 руб./за проект
29 нояб. 2022, в 22:19
1000 руб./за проект