Сегодня седьмой из 100 дней моего изучения javascript, и сегодня я узнал о циклах javascriptfor...in и for...of.
Оба оператора for...in
и for...of
используются для итерации.
for...in
перебирает все перечислимые строковые свойства объекта (игнорируя свойства, отмеченные символами), включая унаследованные перечисляемые свойства.
for...of
выполняет цикл, который работает с итерируемым. Итерируемые объекты включают объекты Array
, String
, TypedArray
, Map
, Set
, arguments
, генераторы, созданные функциями генератора, и пользовательские итерации.
Проще говоря, for…in выполняет итерации по объектам и for…of по итерации.
Для получения дополнительной информации об итерируемых объектах см. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols#the_iterable_protocol.
Давайте посмотрим несколько примеров
var person = { name: 'evie', age: 25, city: 'Oslo', country: 'Norway' } for(key in person) { console.log(`${key} : ${person[key]}`); } //output: "name : evie" "age : 25" "city : Oslo" "country : Norway" var array = ['june', 'july', 'august']; for(key in array) { console.log(array[key]); } //output: "june" "july" "august" var array = ['june', 'july', 'august']; for(value of array) { console.log(value); } //output: "june" "july" "august"
Всегда помните Вы не можете использовать for…of для перебора объекта.
var person = { name: 'evie', age: 25, city: 'Oslo', country: 'Norway' } for(value of person) { console.log(`${value}`); } //TypeError: person is not iterable //You need to convert it to array first for (value of Array.from(person)) { console.log(value); }
Знаете ли вы, что for…of был введен в ES6.
Вы, должно быть, думаете, что если уже есть for…in, зачем тогда нам for…of?
for…in перебирает всю цепочку прототипов, что редко бывает нужным, поэтому многие руководства по стилю JavaScript и линтеры не рекомендуют его использовать. for...in
чаще всего используется для целей отладки, поскольку это простой способ проверить свойства объекта (путем вывода на консоль или иным образом).
Давайте разберемся с этим на примере ниже
const myArray = [1,2,3]; Array.prototype.customArray = 'adding property to Array'; Object.prototype.customObj = 'adding property to object'; console.log("-----for...in iteration -----------"); for (const key in myArray) { console.log(myArray[key]); } console.log("-----for...of iteration-----------"); for (const value of myArray) { console.log(value); } output: "-----for...in iteration -----------" 1 2 3 "adding property to Array" "adding property to object" "-----for...of iteration-----------" 1 2 3
Здесь мы добавили одно свойство к прототипу массива (customArray) и одно к прототипу объекта (customObj).
Когда мы перебираем myArray с помощью for…in, он сначала перебирает myArray, а затем его прототип Array,и затем Object, хотя for…of перебирать только myArray.
Это все на сегодня. Догонят завтра.
Спасибо за прочтение. Пожалуйста, хлопайте, если вы найдете историю полезной.
Продолжай учиться!
#100daysofjavascript