벌써 메인 프로젝트가 끝난지도 1달이 다 되었다. 프로젝트를 다시 공부하리라 마음을 먹었던거 같은데 알고리즘 복습과 블로깅 만으로도 이렇게 훌쩍 지나버렸다. 조급해지는 상황이다. 그럴수록 지나왔던 것을 더욱 단단하게 만들고자 한다.
for...of, for...in 은 for문과 비슷하다고 생각하고 사용 하였다. 조금은 사용법이 달라 이번에 정리해보자.
for...of 명령문은 반복가능한 객체
에 대해서 반복하고 각 개별 속성값에 대해 실행되는 문이라고 한다. 여기서 반복가능한 객체
는 iteration protocols를 따른다
Iteration protocols 에 관한 velog
구문
for (variable of iterable) { statement }
- variable
각 반복문에서 서로다른 속성 값이 variable에 할당 된다고한다.
let abc = [1,3,5,7]
for(let i of abc){
console.log(i)
}
//1
//3
//5
//7
for ()괄호 안에 let 대신 const를 사용할 수도 있다고 한다.
사용시 가장 많이 실수 했더 것이 let이나 const를 설정 하지 않았던 점이었다.
let abc = [1,3,5,7]
for(key of abc){}
console.log(key) //7
for(let i of abc){}
console.log(i) //ReferenceError: i is not defined
let이나 const를 사용하지 않은 경우 전역변수 처리되기 때문에, 혹시나 생길 오류를 위해 let이나 const를 사용하도록 하자.
for...in문은 상속된 열거 가능한 속성들(enumerable properties)를 포함한 객체에서 문자열로 키가 지정된 모든 열거 가능한 속성에 대해 반복한다고 한다.(symbol로 키가 지정된 속성은 무시한다고 한다.)
자바스크립트에서 객체 속성들은 내부적으로 숨겨진 속성 3가지가 저장된다고 한다. 그중 하나가 enumerable
이고 이 값이 true 것을 for...in에서 출력하는 것이다.
for (variable in object) { ... }
variable
매번 반복되는 속석이름이 변수로 지정된다고 한다.
object
반복 작업을 수행할 객체이다. 열거형 속성을 가지고 있는 객체.
const obj ={
a : 'a',
b : 'b',
c : 'c'
}
for(let key in obj){
console.log(`${key} : ${obj[key]}`)
}
/*
'a : a'
'b : b'
'c : c'
*/
앞에서 for...in은 enumerable properties
라고 하여 열거가능한 속성들만 작동한다면, for..of는[Symbol.iterator]
속성에 있는 모든 컬렉션 요소에 대해서 반복한다.
let abc = [1,2,3]
abc.foo = "hi"
for (let i in abc) {
console.log(i)
}
//'0'
//'1'
//'2'
//'foo'
for(let i of abc){
console.log(i)
}
//1
//2
//3
[for...of, MDN, 2022년07월07일 접속]
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/for...of
[for...in, MDN, 2022년07월07일 접속]
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/for...in
[[JavaScript] for in, for of 반복문 이해하기, velog, 2022년07월07일 접속]
https://velog.io/@hoon_dev/JavaScript-for-in-for-of-%EB%B0%98%EB%B3%B5%EB%AC%B8-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0