const arr=[1,2,3,4,5,6]
for (let i=0; i<arr.length;i++){
์ด์ฉ๊ตฌ์ ์ฉ๊ตฌ์ฝ๋}
๋ฐ๋ณต๋ฌธ์ ๋ํ์ ์ธ for
๋ฌธ. ์ด์ธ์๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ์ ์๋ ๋ค๋ฅธ ๋ฐ๋ณต๋ฌธ๋ค๋ ์๋๋ฐ, ๋ฐ๋ก for in / for of ๋ค.
์๋์ ๋ฐ๋ณต๋ฌธ๋ค์ ์์์ ๋ณธ for๋ฌธ์ฒ๋ผ ์ฝ๋๋ฅผ ์ฌ๋ฌ๋ฒ ์คํํ ๋ ์ฌ์ฉํ๊ธฐ๋ ํ์ง๋ง, array๋ object์์ ์๋ฃ๋ฅผ ๊บผ๋ผ ๋ ์ฌ์ฉํ๊ธฐ๋ ํ๋ค.
์ค๋ธ์ ํธ ์๋ฃํ์ ์ ์ฅ๋ ์๋ฃ๋ค์ ํ๋์ฉ ๊บผ๋ด๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ฉด ๋๋ค.
let obj = {
name: 'Lee',
age: 27,
}
for (let key์ด๋ฆ์ ๋๊ณณ์ธ๋ฐ์๋ฌด๋ ๊ฒ๋์๋ช
ํ์ผ in obj){
console.log(obj[key์ด๋ฆ์ ๋๊ณณ์ธ๋ฐ์๋ฌด๋ ๊ฒ๋์๋ช
ํ์ผ])}
๋ฐ๋ณต๋ฌธ์ ์ค๋ธ์ ํธ ์๋ฃ ๋ด๋ถ ๋ฐ์ดํฐ ๊ฐ์๋งํผ ๋ฐ๋ณตํ๊ฒ ๋๋ฉฐ, ๋ฐ๋ณตํ ๋๋ง๋ค key~~๋ณ์๋ name,age๋ผ๋ key๊ฐ์ด ๋๋ค. ์ฆ, ๋ฐ๋ณต์๋ง๋ค ๋ณ๊ฒฝ๋๋ key๊ฐ์ ์ด์ฉํ๋ฉด ์ค๋ธ์ ํธ ๋ด์ ์๋ฃ๋ฅผ ๋ชจ๋ ์ถ๋ ฅํ ์ ์๊ฒ ๋๋ค.
์ฃผ์ํ ์ ์ ์ค๋ธ์ ํธ๋ช
[key๊ฐ์๋ช
]
์ด๋ ๊ฒ ์ด๋ค๋ ๊ฒ!
for in ๋ฐ๋ณต๋ฌธ์ ์ ์ ์๋ ๋ฐ์ดํฐ๋ง ์ถ๋ ฅํด์ค๋ค.
Object.getOwnPropertyDescriptor(obj, "age"); ์ ์ฐ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์์ฑ์ด ์ถ๋ ฅ๋๋ค.
// {value: 27, writable: true, enumerable: true, configurable: true}
enumerable์ ์ ์ ์๋์ง์ ์ฌ๋ถ๋ฅผ ๋ปํ๋ฉฐ, true์ฌ์ผ for in ๋ฐ๋ณต๋ฌธ์์ ์ถ๋ ฅ์ด ๊ฐ๋ฅํ๋ค.
class Parent{
}
Parent.prototype.name='Kim'
const ์ค๋ธ์ ํธ = new Parent()
์ค๋ธ์ ํธ.age=29
for (let key in obj){
console.log(obj[key])} // Kim
๊ทผ๋ฐ ๋ถ๋ชจ prototype์ ๋ฐ๋ณต๋ฌธ ๋๋ ค์ ์ถ๋ ฅํด๋ผ์ผ์ ๋ณ๋ก ์๊ธดํ๋ค. ์ด์จ๋ ๋ถ๋ชจ๋๊บผ ๋ง๊ณ ๋ด๊ป๋ง ์ถ๋ ฅํ๊ณ ์ถ์ผ๋ฉด hasOwnProperty()
๋ผ๋ ๊ฐ์ฒด๊ธฐ๋ณธ์ผ๋ก ๋ด์ฅ๋์ด ์๋ ๋ด์ฅํจ์ ์ด์ฉํ๋ฉด ๋ด๊บผ๋ง ์ถ๋ ฅํ ์๋ ์๋ค.
for (let key in obj){
if(์ค๋ธ์ ํธ.hasOwnProperty(key)) {
console.log(obj[key]); //29
}
}
for of ๋ฐ๋ณต๋ฌธ์
Array, string, arguments, NodeList, Map, Set
iterableํ ์๋ฃํ์๋ง ์ฌ์ฉ๊ฐ๋ฅ.
[Symbeol.iterator]()
์ด๋ผ๋ ์ผ์ข
์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๋ฃํ๋ค์ ๋ปํ๋ค.
๊ทธ๋ผ ์ฌ๋ณผ์ด ๋ญก๋๊น?
์ฌ๋ณผ์ ์ค๋ธ์ ํธ ์๋ฃํ์ ๋น๋ฐ์ค๋ฐ key ๊ฐ์ ๋ถ์ฌํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค. ์๋ object ์๋ฃํ์๋ ๋ฌธ์๋ง ๋ฃ์ ์ ์์๋๋ฐ ES6๋ถํฐ๋ Symbol๋ key ๊ฐ์ผ๋ก ์
๋ ฅํ ์ ์๊ฒ ๋์๋ค.
์ฌ๋ณผ ๋ง๋๋ ๋ฒ: const ์ฌ๋ณผ = Symbol('์ด์ฉ๊ตฌ์ ์ฉ๊ตฌ์ค๋ช
')
key ๊ฐ์ผ๋ก ๋ฃ๋ ๋ฒ: person[์ฌ๋ณผ]=100
const person = {
name:'Lee'
}
person.weight=45
const weight=Symbol('๋์ ๋น๋ฐ์ค๋ฐ ๋ชธ๋ฌด๊ฒ')
person[weight]=200 // ํน์ const person = {name:'Lee', [weight]:200} ์ด๊ฒ๋ ๊ฐ๋ฅ
console.log(person.weight)// 45
๋ํ, Symbol์ ๋ฐ๋ณต๋ฌธ์์ ๊ฐ์งํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ for in ๋ฌธ์ ์จ์ ๋ฐ๋ณต๋ฌธ ๋๋ ค๋ ๋ํ๋์ง ์๋๋ค.
Symbol.for()
์ ์ฐ๋ฉด ์ ์ญ์ฌ๋ณผ๋ก ๋ง๋ค ์๋ ์๋ค.
const a = Symbol.for('์ด์ฉ๊ตฌ์ค๋ช
')
const b = Symbol.for('์ด์ฉ๊ตฌ์ค๋ช
')
console.log(a===b) //true
.for()์ ์จ์ ์๋ก์ด Symbol์ ๋ง๋ค๊ณ ๊ฐ์ ์ค๋ช
์ด ์ฐ๊ฒ๋๋ฉด
์ด๋ฏธ ๊ทธ ์ค๋ช
์ ์ฐ๊ณ ์๋ Symbol์ ๊ทธ ์๋ฆฌ์ ์ง์ด๋ฃ๋๋ค. ์๋ ์ฝ๋์ฐธ๊ณ .
const a = Symbol.for('์ด์ฉ๊ตฌ์ค๋ช
')
const b = a
console.log(a===b) //true
์ค๋ ์๋กญ๊ฒ ์๊ฒ ๋ ๊ฒ
Symbol์ด๋ผ๋ ๊ฑธ ํตํด ๋น๋ฐ์ค๋ฐ Key ๊ฐ์ ์ฐ๋ ๋ฒ์ ๋ฐฐ์ ๋ค.
์ค๋ ๋ฐฐ์ด ๊ฒ๋ค ์ค ๋ ์๊ณ ์ถ๊ฑฐ๋ ๊ถ๊ธํ ๊ฒ
๊ทผ๋ฐ ์ด๋ฐ ์จ๋จน๋๊ฑธ๊น?
์ค๋์ ์๊ฐ
LA ํ๋ฉด ๋ ์ค๋ฅด๋ ๋ผ๋ผ๋๋.
์์ฆ ๋์ ์ต์ ์ฌ์ง.