-
๊ฐ์ฒด์ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
-
๋ฐฐ์ด์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์ํ์ ํ ์ ์์ผ๋ ์ฉ๋์ ์ ํฉํ์ง ์๋ค. (์ง์ง ๊ฐ์ฒด์ ์ค์ ํ ํค ๊ฐ๊น์ง ๋์จ๋ค.) MDN ์ค๋ช
const book = { title: "Pride and Prejudice", author: { name: "Jane Austen", counrty: "United Kingdom" }, language: "english", genre: "romance", year: '1813.01.28' } // for..in ๋ฌธ์ ํตํด ์กฐํํ๋ค for(let key in book) { console.log(key, book[key]); }
-
Enumerable ํ ์์ฑ๋ง ์กฐํํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ฐ์ฒด ์์ฑ๋ค์ ๋ด๋ถ์ ์ผ๋ก ์ฌ์ฉํ๋ ์จ๊ฒจ์ง ์์ฑ๋ค์ ๊ฐ์ง๊ณ ์๋ค.
- ๊ทธ ์ค ํ๋์ธ
[[Enumerable]](์ ์ ์๋) ๊ฐ์ด for in ๊ตฌ๋ฌธ์์ true๋ก ์ ํ ์ด ๋์ด ๋ชจ๋ ์ด๊ฑฐ ๊ฐ๋ฅํ ์์ฑ์ ๋ํด ๋ฐ๋ณตํ ์ ์๋ค. (์ด๊ฑฐํ ์์ฑ) - ๊ฐ์ฒด์ ๋ชจ๋ ๋ด์ฅ ๋ฉ์๋๋ฅผ ๋น๋กฏํด ๊ฐ์ข ๋ด์ฅ ํ๋กํผํฐ ๊ฐ์ ๋น์ด๊ฑฐํ ์์ฑ์ ๋ฐ๋ณต๋์ง ์๋๋ค.
-
๊ฐ์ฒด์ prototype๋ ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ถ๋ ฅ์ด ๋๋ค.
Object.prototype.nickName = 'Jane'; // for..in ๋ฌธ์ ํตํด ์กฐํํ๋ค for(let key in book) { console.log(`key : ${key} / value : ${book[key]}`); }
-
"๊ฐ์ฒด ์์ (Own)์ ์์ฑ(Property)์ ๊ฐ์ง๊ณ (has) ์๋์ง ํ์ธํ๋ ๋ฐฉ๋ฒ"์ด ๋ฎ์ด์ฐ์ฌ์ง ์ ์๋ ์ํ์ ๋์ฒํ๋ ์์ ํ ๋ฐฉ์์?
-
let key = book.hasOwnProperty(key)์ ๊ฐ์ด ์์ฑํ ๊ฐ์ฒด์์ ์์ฑ์ ์กฐํํ ๊ฒฝ์ฐ ์์ฑํ ๊ฐ์ฒด์hasOwnProperty์์ฑ์ ์์ฑํ๋ ๋ฑ์ ์ํ์ด ์์ด ์ ์ ํ์ง ์๋ค. -
๋ฐ๋ผ์, ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด ์์ฒด์ ๋ฅ๋ ฅ. ์ง์ง ๊ฐ์ฒด์ ์๋ณธ(prototype)์์ call() ๋ฉ์๋๋ฅผ ํตํด hasOwnProperty ๊ธฐ๋ฅ์ ๋น๋ ค ์์ฑํ ๊ฐ์ฒด book์ ์์๋ง ๋ถ๋ฌ์จ๋ค.
for(let key in book){ // Object.prototype.hasOwnProperty.call(book,key); if(({}).hasOwnProperty.call(book, key)){ console.log(`key : ${key} / value : ${book[key]}`); } }
- ๋ฐฐ์ด์ ์ฃผ๋ก ์ฌ์ฉํ๋ค.
- String, arguments, NodeList(getElementByClassName,querySelectorAll), Map, Set๊ณผ ๊ฐ์ ์๋ฃํ์๋ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. => iterable์ธ ์๋ฃํ์ ์ ์ฉ๊ฐ๋ฅ
- iterable ์๋ฃํ์ ๋ํ ๊ฐ๋จํ ์ค๋ช
ํ๋ฉด
[Symbol.iterator]๋ผ๋ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ์๋ฃํ์ด๋ค. [Symbol.iterator()]
- iterable ์๋ฃํ์ ๋ํ ๊ฐ๋จํ ์ค๋ช
ํ๋ฉด
- Array ๊ฐ์ฒด, Map, Set ๋ฑ์์ ์ฌ์ฉ๊ฐ๋ฅํ ๋ฉ์๋์ด๋ค.
- forEach ๊ตฌ๋ฌธ์ ์ธ์๋ก callback ํจ์๋ฅผ ๋ฑ๋ก ํ ์ ์๋ค.
let items = ['itme1', 'item2', 'item3']; items.forEach(function(item) { console.log(item); })
for in, for of ๋ฐ๋ณต๋ฌธ ๋ธ๋ก๊ทธ ๋ฐ๋ก๊ฐ๊ธฐ
