После некоторого времени написания кода на JavaScript я на днях понял, что все еще немного путаюсь между циклами for…in и for…of в JavaScript. . Проведя небольшое исследование и поэкспериментировав с кодом в своей консоли, я наконец понял, в чем заключается главное отличие, и захотел поделиться тем, что узнал.

For…in перебирает все перечисляемые свойства объекта или массива. По определению, перечислимое свойство — это свойство, внутренний флаг которого имеет значение true. Это было очень запутанно для меня, чтобы понять, но после тестирования в консоли я пришел к следующим трем выводам:

  • Если вы перебираете строку → значением будут индексы
  • Если вы перебираете массив → значение также будет индексом
  • Если вы зацикливаетесь на объекте → значения будут фактическими значениями пары ключ/значение для этого объекта.

Некоторые примеры:

function test(){
  let str = "hello"
     for(let val in str){
         console.log(val)
     }
}

Этим выводом для этого будет индекс каждой буквы в строке, например:

// 0  1  2  3  4

Тогда для массива это будет то же самое:

function test(){
  let arr = [5,6,7,8]
     for(let val in arr){
         console.log(val)
     }
}

Результатом являются такие индексы:

// 0  1  2  3

И, наконец, для объекта:

function test(){
  let obj = {A: "a", B: "b", C: "c"}
     for(let val in obj){
         console.log(val)
     }
}

Выходы - это все фактические значения:

// A  B  C

Разница при использовании цикла for…of заключается в том, что теперь вы перебираете все итерируемые объекты. Таким образом, фактические значения элементов или букв в массиве или строке и ключи в объекте. Используя те же примеры, что и выше, я покажу вам новые результаты.

Для строки:

function test(){
  let str = "hello"
    for(let val of str){
       console.log(val)
    }
}

Этим выводом будет каждая буква в строке

// h  e  l  l  o

Затем для массива:

function test(){
  let arr = [5,6,7,8]
     for(let val of arr){
         console.log(val)
     }
}

На выходе будет каждый элемент массива:

// 5  6  7  8

И, наконец, для объекта:

function test(){
  let obj = {A: "a", B: "b", C: "c"}
     for(let val of obj){
         console.log(val)
     }
}

Выходные данные — это все фактические значения в паре ключ: значение:

// "a"  "b"  "c"

Я так привык постоянно использовать базовый цикл for, когда он может ОЧЕНЬ пригодиться. Я всегда знал, что делает каждый из этих циклов, но прошло некоторое время с тех пор, как я проверял их, чтобы убедиться, что я действительно знаю, что происходит под ремнем. Я надеюсь, что это может помочь другим понять, когда использовать каждый цикл!