for...in
μ λͺ¨λ κ°μ²΄μ μ΄κ±°κ°λ₯ν μμ±μ λν΄ λ°λ³΅, ν€μ μ κ·Όνλ€.
for...of
λ λͺ¨λ κ°μ²΄κ° μλ 컬λ μ
μ μ©!
[Symbol.iterator] μμ±μ΄ μλ λͺ¨λ 컬λ μ
μμμ λν΄ μ΄ λ°©μμΌλ‘ λ°λ³΅ν©λλ€. κ°μ λ°ννλ€.
"μ¬λ³Ό" λ°μ΄ν° νμμ κ°μΌλ‘ μ΅λͺ μ κ°μ²΄ μμ±(object property)μ λ§λ€ μ μλ νΉμ±μ κ°μ§ μμ λ°μ΄ν° νμ(primitive data type). μ΄ λ°μ΄ν° νμμ ν΄λμ€λ κ°μ²΄ νμ(object type)μ λ΄λΆμμλ§ μ κ·Όν μ μλλ‘ μ μ©(private) κ°μ²΄ μμ±μ ν€(key)λ‘ μ¬μ©λ©λλ€.
Symbol.iterator μ¬λ³Όμ κ°μ²΄μ λμνλ κΈ°λ³Έ μ΄ν°λ μ΄ν°λ₯Ό μ§μ ν©λλ€. κ°μ²΄κ° λ°νλ νμκ° μμλλ μΈμ λ μ§@@iterator λ©μλλ μΈμ μμ΄λ νΈμΆ ν μ μμ΅λλ€. λ°νλ iteratorλ λ°λ³΅ν κ°μ μ·¨λνκΈ° μν΄ μ¬μ©λ©λλ€.
@@iterator λ©μλλ₯Ό κ°μ§κ³ μλ λ΄μ₯ν νμ
Array.prototype@@iterator
TypedArray.prototype@@iterator
String.prototype@@iterator (en-US)
Map.prototype@@iterator (en-US)
Set.prototype@@iterator (en-US)
const array = [1,2,3]
array.type = 'arr'
array //[1, 2, 3, type: 'arr']
for(let el of array){
console.log(el)
}
// 1, 2, 3
for(let el in array){
console.log(el)
}
// 0, 1, 2, type
const string = 'string'
for (let value of string){
console.log(value)
}
//s t r i n g
for(let key in string){
console.log(string[key])
}
//s t r i n g
let iterable = new Map([["a", 1], ["b", 2], ["c", 3]]);
for (let entry of iterable) {
console.log(entry);
}
// [a, 1]
// [b, 2]
// [c, 3]
for (let [key, value] of iterable) {
console.log(value);
}
// 1
// 2
// 3
let iterable = new Set([1, 1, 2, 2, 3, 3]);
for (let value of iterable) {
console.log(value);
}
// 1
// 2
// 3
for...inμ λͺ¨λ κ°μ²΄λ₯Ό νμν μ μλ νΈν¨μ΄ μμ§λ§, μμ²λΌ μ½λ μ μμλ€μμλ λΆκ°λ₯νκ³ λ°°μ΄μμ μ μμλ(μμμ - 0,1,2) μ΄λ¦μ μμ±(μμ - type)μ λ°ννκ² λλ©΄μ μ‘°μ°¨ μμλ₯Ό 보μ₯νμ§ μκΈ° λλ¬Έμ μμκ° μ€μν λ°°μ΄μ μνν λλ forλ°λ³΅λ¬Έμ΄λ forEach, map, for...ofλ₯Ό μ¬μ©νλ κ²μ΄ κΆμ₯λλ€.
for...inμ μ½κ² κ°μ²΄ μμ±μ μ κ·Όν μ μκΈ° λλ¬Έμ μ€μ λ‘λ λλ²κΉ
μ©μΌλ‘ μ¬μ©νλ κ²μ΄ κΆμ₯λλ€. κ²°κ΅ μ¬μ©νμ§ λ§λΌλ μ΄μΌκΈ° ^_^?
κ°μ²΄νμμ ν λ κ°μ²΄μ체λ₯Ό μννκΈ°λ³΄λ€ Object.keys(obj)
λ°©μμ²λΌ λ°°μ΄λ‘ λ³κ²½νμ¬ μννλ κ²μ΄ μ’λ€.
μ°Έκ³ λ§ν¬ : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Statements/for...in#%EC%84%A4%EB%AA%85