티스토리 뷰
JavaScript 반복(for ... in, for ... of, .forEach)
geonwoopaeng@gmail.com 2023. 4. 10. 22:39JavaScript 반복
JavaScript에서 객체나 배열등을 반복할 때 for문을 사용하게 됩니다. 또한, JavaScript에서 for ... in
, for ... of
, .forEach
등을 만들어서 보다 편리하게 Object
, Array
등을 반복할 수 있게 됩니다.
for ... in
- 객체의 열거가능한 key(속성)들을 반복하는데 사용한다. (Nonenumerable(비열거형)인 value에는 접근할 수 없습니다.)
- Object의 key or index를 반복
- 반복할 때마다 인스턴스 or 프로토타입 체인을 검색하므로 느린 속도를 가집니다.
- index에 할당되는 값들은 String 타입으로 변환됩니다.
let obj = {
a: 1,
b: 2
};
for (let key in obj) {
console.log(key); //a, b
}
for ... of
- [Symbol.iterable]한 Object(Array, Map, Set, String, TypedArray 등)에 대한 속성값(value)을 반복 순회한다.
- 요소를 직접 반복
let obj = [1, 2];
for (let element of obj) {
console.log(element); //1, 2
}
*Interable, iterator
- Iteration protocol
: 어떠한 객체든 특정 조건을 만족하면 iterable 또는 iterator로 평가 받을 수 있도록 하는 규약
- Iterable
: 반복이 가능한 객체
준수 사항
- 객체 내에
[Symbol.iterator]
메서드가 존재
- Iterator
Iterable 객체에서 반복을 실행하는 반복기
(Iterable 객체가 반복을 하며 어떠한 값을 반환할 지 결정)
준수사항
- 객체 내에
next
메서드 존재 next
메서드는 IteratorResult 객체({done: boolean} || {value: any}
) 반환한다.
(done
: Iterator 반복 완료 판별,value
: 반복 수행을 하면서 반환하는 값)
.forEach
Array, Map, Set의 요소들을 반복하여 작업을 수행하며 forEach 내부 callback함수를 사용한다.(undefined 반환 -> break
, continue
, return
구문 사용 못 함)
arr.forEach(callback(currentvalue[, index[, array]])[, thisArg])
let obj = [1, 2];
obj.forEach((o) => console.log(o)); // 1, 2
*추가 (forEach는 순차처리가 왜 안되는 가?)
=> forEach는 배열 요소를 돌면서 callback을 실행할 뿐, 한 callback이 끝날때까지 기다렸다가 다음 callback을 실행하는 것이 아니다.
내부 코드를 보면 다음과 같습니다.
Array.prototype.forEach = function (callback) {
for (let idx = 0; idx < this.length; idx++) {
callback(this[idx], idx, this);
}
}
Ref
https://jsdev.kr/t/for-in-vs-for-of/2938
https://velog.io/@bining/javascript-for-in-for-of-forEach-%EC%B0%A8%EC%9D%B4%EC%A0%90
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...in
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach
https://262.ecma-international.org/6.0/#sec-iteration\
'Tip and Error > Javascript' 카테고리의 다른 글
day.js & air-datepicker (0) | 2023.04.11 |
---|---|
JavaScript 객체는 배열? 배열은 객체? (0) | 2023.04.10 |
신형 -> 구형으로 기본Babel setting(w. webpack) (0) | 2022.05.12 |
Window SPA Express.js setting[Simple] (0) | 2022.04.11 |
SAP위한 Express 설정 (window, VSCode Live Server X) (0) | 2022.04.11 |