[...box.children] ๊ตฌ๋ฌธ์€ HTMLCollection์„ **๋ฐฐ์—ด(Array)**๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ด๊ฒƒ์€ HTMLCollection์—๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ , ๋ชจ๋“  ์ดํ„ฐ๋Ÿฌ๋ธ”(Iterable) ๊ฐ์ฒด์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


1๏ธโƒฃ [...box.children]์˜ ์˜๋ฏธ

const arr = [...box.children];
  • box.children โ†’ HTMLCollection(์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด)
  • ...(์Šคํ”„๋ ˆ๋“œ ์—ฐ์‚ฐ์ž) โ†’ ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ํŽผ์ณ์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด๋กœ ๋ณต์‚ฌ
  • ๊ฒฐ๊ณผ โ†’ ์‹ค์ œ ๋ฐฐ์—ด(Array)

์ฆ‰, ๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ด๋ ‡๊ฒŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘‡

โ€œbox.children ์•ˆ์˜ ์š”์†Œ๋“ค์„ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ๋ฐฐ์—ด์— ๋‹ด์•„๋ผ.โ€


2๏ธโƒฃ HTMLCollection์ด๋ž€?

HTMLCollection์€ DOM ์š”์†Œ๋“ค์˜ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์œ ์‚ฌ ๋ฐฐ์—ด ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.

<div class="box">
  <p>์ฒซ ๋ฒˆ์งธ</p>
  <p>๋‘ ๋ฒˆ์งธ</p>
  <p>์„ธ ๋ฒˆ์งธ</p>
</div>
const box = document.querySelector(".box");
console.log(box.children);
// HTMLCollection(3) [<p>, <p>, <p>]

๐Ÿ’ก HTMLCollection์€ forEach, map, filter ๊ฐ™์€ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ๋ฅผ ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘‡

[...box.children].forEach(el => console.log(el.textContent));

3๏ธโƒฃ [...iterable]์€ HTMLCollection๋ฟ ์•„๋‹ˆ๋ผ โ€œ๋ชจ๋“  ์ดํ„ฐ๋Ÿฌ๋ธ”โ€์— ์‚ฌ์šฉ ๊ฐ€๋Šฅ

์Šคํ”„๋ ˆ๋“œ ๋ฌธ๋ฒ•(...)์€ **์ดํ„ฐ๋Ÿฌ๋ธ”(Iterable)**์„ ๋Œ€์ƒ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋ž€ for...of๋กœ ์ˆœํšŒ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค.

โœ… ์Šคํ”„๋ ˆ๋“œ ๊ฐ€๋Šฅํ•œ ๋Œ€ํ‘œ ์ดํ„ฐ๋Ÿฌ๋ธ”

์ดํ„ฐ๋Ÿฌ๋ธ” ๊ฐ์ฒด ์„ค๋ช… ์˜ˆ์‹œ
Array ๊ธฐ๋ณธ ๋ฐฐ์—ด [...[1, 2, 3]] โ†’ [1, 2, 3]
String ๋ฌธ์ž์—ด [...'ABC'] โ†’ ['A', 'B', 'C']
Set ์ค‘๋ณต ์—†๋Š” ์ง‘ํ•ฉ [...new Set([1, 2, 2, 3])] โ†’ [1, 2, 3]
Map ํ‚ค-๊ฐ’ ์Œ์˜ ์ง‘ํ•ฉ [...new Map([['a',1],['b',2]])] โ†’ [ ['a',1], ['b',2] ]
NodeList querySelectorAll() ๋ฐ˜ํ™˜๊ฐ’ [...document.querySelectorAll('p')]
HTMLCollection children, getElementsByTagName() ๋“ฑ [...box.children]

4๏ธโƒฃ โŒ ์Šคํ”„๋ ˆ๋“œ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ (๋น„์ดํ„ฐ๋Ÿฌ๋ธ”)

์ผ๋ฐ˜ ๊ฐ์ฒด(Object)๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ดํ„ฐ๋Ÿฌ๋ธ”์ด ์•„๋‹™๋‹ˆ๋‹ค.

const obj = { a: 1, b: 2 };
const arr = [...obj]; // โŒ TypeError: obj is not iterable

โœ… ํ•˜์ง€๋งŒ ๋ณ€ํ™˜ ํ›„์—” ๊ฐ€๋Šฅ!

๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋ฉด ์Šคํ”„๋ ˆ๋“œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘‡

[...Object.entries(obj)] // โœ… [['a',1], ['b',2]]
[...Object.keys(obj)]    // โœ… ['a','b']
[...Object.values(obj)]  // โœ… [1,2]

5๏ธโƒฃ ์š”์•ฝ ์ •๋ฆฌ

ํƒ€์ž… [...something] ๊ฐ€๋Šฅ ์—ฌ๋ถ€ ์ด์œ 
Array โœ… ์›๋ž˜ ์ดํ„ฐ๋Ÿฌ๋ธ”
String โœ… ํ•œ ๊ธ€์ž์”ฉ ์ˆœํšŒ ๊ฐ€๋Šฅ
Set / Map โœ… ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ
NodeList / HTMLCollection โœ… DOM ์ˆœํšŒ ๊ฐ€๋Šฅ
Object (์ผ๋ฐ˜ ๊ฐ์ฒด) โŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ดํ„ฐ๋Ÿฌ๋ธ” ์•„๋‹˜

๐Ÿ”š ๋งˆ๋ฌด๋ฆฌ

[...box.children]์€ HTMLCollection์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ฝ”๋“œ์ง€๋งŒ,
๋ณธ์งˆ์ ์œผ๋กœ๋Š” **โ€œ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๋ผ๋ฉด ๋ชจ๋‘ ํŽผ์น  ์ˆ˜ ์žˆ๋‹คโ€**๋Š” ๋œป์ž…๋‹ˆ๋‹ค.

์ฆ‰, [...iterable]์€
๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ๋ณต์‚ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ๋ฒ”์šฉ์ ์ธ ๋ฌธ๋ฒ•์ž…๋‹ˆ๋‹ค ๐Ÿš€