Skip to content

Latest commit

ย 

History

History
90 lines (71 loc) ยท 3.22 KB

File metadata and controls

90 lines (71 loc) ยท 3.22 KB

for..in, for..of ๋ฐ˜๋ณต๋ฌธ ์ดํ•ดํ•˜๊ธฐ


๋ชฉ์ฐจ


for..in

  • ๊ฐ์ฒด์— ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๋ฐฐ์—ด์— ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์ˆœํ™˜์„ ํ•  ์ˆ˜ ์žˆ์œผ๋‚˜ ์šฉ๋„์— ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. (์ง„์งœ ๊ฐ์ฒด์˜ ์„ค์ •ํ•œ ํ‚ค ๊ฐ’๊นŒ์ง€ ๋‚˜์˜จ๋‹ค.) 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]}`);
      }
    }

for..of

  • ๋ฐฐ์—ด์— ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
  • String, arguments, NodeList(getElementByClassName,querySelectorAll), Map, Set๊ณผ ๊ฐ™์€ ์ž๋ฃŒํ˜•์—๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. => iterable์ธ ์ž๋ฃŒํ˜•์— ์ ์šฉ๊ฐ€๋Šฅ
    • iterable ์ž๋ฃŒํ˜•์— ๋Œ€ํ•œ ๊ฐ„๋‹จํžˆ ์„ค๋ช…ํ•˜๋ฉด [Symbol.iterator]๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ž๋ฃŒํ˜•์ด๋‹ค.
    • [Symbol.iterator()]

forEach

  • Array ๊ฐ์ฒด, Map, Set ๋“ฑ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋ฉ”์„œ๋“œ์ด๋‹ค.
  • forEach ๊ตฌ๋ฌธ์˜ ์ธ์ž๋กœ callback ํ•จ์ˆ˜๋ฅผ ๋“ฑ๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.
    let items = ['itme1', 'item2', 'item3'];
    
    items.forEach(function(item) {
      console.log(item);
    })

์ฐธ๊ณ ์ž๋ฃŒ

for in, for of ๋ฐ˜๋ณต๋ฌธ ๋ธ”๋กœ๊ทธ ๋ฐ”๋กœ๊ฐ€๊ธฐ