거인의 코딩일지
[JS] for...in, for...of 의 차이점????? 본문
728x90
for...in ?
- for...in문은 상속된 열거 가능한 속성들을 포함하여 객체에서 문자열로 키가 지정된 모든 열거 가능한 속성에 대해 반복한다.
- 객체 자체의 모든 열거 가능한 속성들과 프로토타입 체인으로부터 상속받은 속성들에 대해 반복할 것
- 객체의 반복을 위해 만들어졌지만 배열의 반복을 위해서는 추천되지 않음
- 객체의 속성을 확인할 수 있기에 실질적으로 디버깅을 위해 사용될 수 있음
var obj = {
a: 1,
b: 2,
c: 3
};
for (var item in obj) {
console.log(item) // a, b, c
}
var arr = [1, 2, 3];
for (var item in arr) {
console.log(item) // 0, 1, 2
}
- for...in 문에 객체가 아닌 배열을 넣었을 경우??
- JavaScript 에서 배열도 Object 타입으로 인식 하기 때문에 결과가 나온다.
- 다만! 일치하는 값은 아니고 해당 배열의 index가 출력되는 걸 확인할 수 있다.
for...of ??
- for...of 명령문은 반복가능한 객체 (Array, Map, Set, String, TypeArray, arguments 객체 등) 에 대해서 반복하고 각 개별 속성 값에 대해 실행되는 문이 있는 사용자 정의 반복 후크를 호출하는 루프를 생성한다.
var arr = [1, 2, 3];
for (var item of arr) {
console.log(item); // 1, 2, 3
}
var obj = {
a: 1,
b: 2,
c: 3
};
for (var item of obj) {
console.log(item);
}
//Uncaught TypeError: obj is not iterable
- 배열을 순환 할때 배열이 아닌 객체에 사용한다면??
- Uncaught TypeError: obj is not iterable 반복 불가능하다는 TypeError를 뱉어낸다.
for...of 와 for...in 의 차이????
Object.prototype.objCustom = function () {};
Array.prototype.arrCustom = function () {};
let iterable = [3, 5, 7];
iterable.foo = "hello";
for (let i in iterable) {
console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
}
for (let i of iterable) {
console.log(i); // logs 3, 5, 7
}
- for... in 루프는 객체의 모든 열거 가능한 속성에 대해 반복한다.
- for...of 구문은 컬렉션 전용
- 모든 객체보다는, [Symbol.iterator] 속성이 있는 모든 컬렉션 요소에 대해 이 방식으로 반복한다.
728x90
'코딩 > JS' 카테고리의 다른 글
[CSS] 원하는 색깔 코드 따오는 방법?? (0) | 2023.10.11 |
---|---|
[Vue.js] 네비게이션가드 란?? (0) | 2023.10.08 |
[J.S] js에서의 프록시(Proxy)! (0) | 2023.10.05 |
[JS] Array 의 내장 함수(2) (0) | 2023.09.26 |
[JS] Array 의 내장 함수(1) (0) | 2023.09.26 |