์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ช ์ ํค, ํ๋กํผํฐ ๊ฐ์ ๊ฐ์ด๋ผ๊ณ ํ๋ฉฐ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ด ๋ค์ค๊ฐ ๋ฐ์ดํฐ ํํ์ผ๋ก์์ ๊ฐ์ฒด๋ผ๊ณ ํ๋ค.
์ด ๊ธ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฌ์ฉ๋๋ ์ฐ๊ด ๋ฐฐ์ด๊ณผ ๊ด๋ จ๋ ์ฉ์ด๋ฅผ ๊ฐ๋จํ ์ ๋ฆฌํด๋ฉด, ์ผ๋ฐ์ ์ผ๋ก ์ซ์๋ฅผ ํค๋ก ๊ฐ์ ๋ฝ์ ์ ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ฐฐ์ด์ด๋ผ๊ณ ํ๋ค. ๋ฐฐ์ด์ ํค๋ ์ฐ์ํ๋ ์ซ์์ด๋ฏ๋ก ์์๊ฐ ์๋ ๊ฐ์ ๋ชจ์์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์ซ์ ์ด์ธ์ ํค๋ ๋๋ถ๋ถ ๋ฌธ์์ด์ด์ง๋ง ๋ฌธ์์ด์ ํ์ ๋์ง ์๊ณ ์์์ ํ์ ์ธ ํค๋ฅผ ์ด์ฉํ์ฌ ํค์ ๊ฐ์ ๋ชจ์์ ๋ค๋ฃจ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ฐ๊ด ๋ฐฐ์ด์ด๋ผ๊ณ ํ๋ค. ์ฐ๊ด ๋ฐฐ์ด์ ๋งต์ด๋ ์ฌ์ ์ด๋ผ๊ณ ๋ถ๋ฅด๋ ์ธ์ด๋ ์์ผ๋ฉฐ, ๋ด๋ถ ๊ตฌํ์์๋ ํด์(hash)๋ผ๊ณ ๋ถ๋ฅด๋ ์ธ์ด๋ ์๋ค.
์ด๋ฆ๋ง ๋ค๋ฅผ ๋ฟ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ ๊ฒฐ๊ตญ ๊ฐ์ ๋ชจ์์ธ๋ฐ, ์ด๋คย ์ด๋ฆ์ผ๋ก ์ฐ๋ ๋ฌธ์ ๋ ์์ง๋ง ์ฐ๊ด ๋ฐฐ์ด์ด๋ผ๋ ์ฉ์ด๋ฅผ ์ฌ์ฉํ์.
์ฐ๊ด ๋ฐฐ์ด์ ์ฃผ๋ ์ฉ๋๋ ํค๋ก ๊ฐ์ ๋ฝ์๋ด๋ ์กฐ์์ด๋ค.
๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด, ํนํ ์คํฌ๋ฆฝํธ ๊ณ์ด ์ธ์ด๋ ์ธ์ด ๊ธฐ๋ฅ์ผ๋ก ์ฐ๊ด ๋ฐฐ์ด ํ์ ์ ์ ๊ณตํ๊ณ ์๋ค. ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๊ฐ์ฒด๋ฅผ ์ฐ๊ด ๋ฐฐ์ด๋ก ์ฌ์ฉํ๋ ๊ฒ์ ์ฃผ๋ก ์ฌ์ฉํ๊ณ ์๋ค.
๊ฒฐ๊ตญ, ์ฐ๊ด ๋ฐฐ์ด์ฉ ๊ฐ์ฒด๊ฐ ๋ฐ๋ก ์๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ ์์ ์ผ๋ก ๋ณด๋ ๊ฒ ๋ฟ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๊ฐ์ฒด๋ฅผ ์ฐ๊ด ๋ฐฐ์ด๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๊ฐ์ฒด ๋ฆฌํฐ๋ด๋ก ์์ฑํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์๋ length ํ๋กํผํฐ๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผย **์ ์ฌย ๋ฐฐ์ด๊ฐ์ฒด(array-like objects)**๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
์๋ฅผ ๋ค์ด ์ผ๋ฐ ๊ฐ์ฒด์ length ํ๋กํผํฐ๊ฐ ์๋ค๊ณ ๊ฐ์ ํด ๋ณธ๋ค๋ฉด ๊ทธ ์ผ๋ฐ ๊ฐ์ฒด๋ ์ ์ฌ๋ฐฐ์ด๊ฐ์ฒด์ด๋ฉฐ ์ด๋ฌํ ์ ์ฌ๋ฐฐ์ด ๊ฐ์ฒด์ ๊ฐ์ฅ ํฐ ํน์ง์ ๊ฐ์ฒด์์๋ ๋ถ๊ตฌํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ค ๋ฐฐ์ด๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๊ฒ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค.
var arr = ['foo'];
// ๋ฐฐ์ด ํ์ค๋ฉ์๋์ธ push๋ก ๋ฐ์ดํฐ ์ถ๊ฐ
arr.push('bar');
console.log(arr); // ['foo', 'bar'] ๊ธฐ๋ก
var obj = {
name : 'jaehee',
length : 1
};
// obj๋ ์ผ๋ฐ ๊ฐ์ฒด์ง๋ง lengthํ๋กํผํฐ๋ฅผ ์ง์ ํด ์ค
// ๋๊ฐ์ด ํ์ค๋ฉ์๋์ธ push๋ก ๋ฐ์ดํฐ ์ถ๊ฐ
obj.push('pub');
console.log(obj); // Uncaught TypeError: undefined is not a function => error ๋ฐ์
ํ์ง๋ง ์ผ๋ฐ ๊ฐ์ฒด๊ฐ ํ๋กํ ํ์
๊ณผ apply()
๋ฉ์๋๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ์ฒด์ด์ง๋ง ํ์ค ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์์ ์ฝ๋์์ length ํ๋กํผํฐ๋ฅผ ์ง์ ํ ์ ์ฌ๋ฐฐ์ด๊ฐ์ฒด์ธ obj๋ ๋น์ฐํ ๋ฐฐ์ด์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด ๋ฉ์๋์ธ push()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
var obj = {
name : 'jaehee',
length: 1
};
Array.prototype.push.apply(obj,['pub']);
console.log(obj);
์์ ์ฝ๋๋ ์ ์ฌ๋ฐฐ์ด๊ฐ์ฒด์ธ obj์ ๋ํด push()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ pub์ ์ถ๊ฐํ๋ฉด, ์ค์ ๋ก obj ๊ฐ์ฒด์ '1'ํ๋กํผํฐ์ 'pub'์ด ์ถ๊ฐ๋๊ณ length ๊ฐ์ 2๋ก ์ฆ๊ฐํ ๊ฒ์ ํ์ธ ํ ์๊ฐ ์๋ค.
์ด๋ฌํ ์ ์ฌ ๋ฐฐ์ด๊ฐ์ฒด๋ย arguments ๊ฐ์ฒด๋ย jQuery ๊ฐ์ฒด๊ฐ ์ด๋ฌํ ์ ์ฌ๋ฐฐ์ด ๊ฐ์ฒดํํ๋ก ๋์ด์๋ค.
๊ฐ์ฒด์ ํ๋กํผํฐ์ ์ ๊ทผํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ย []ย ์ฐ์ฐ์๋ย ์๋ณ์(์๋ณ์๋ ํ๋ก๊ทธ๋๋จธ๊ฐ ํ๋ก๊ทธ๋จ ์์ ์ง์ ์ฝ๋ฉํ์ฌ ๋ฃ๊ธฐ ๋๋ฌธ์ ์ ์ ์ด๋ค)ย ๋์ , ํ๋ก๊ทธ๋จ ์คํ ์๊ฐ์ ๋์ ์ผ๋ก ์ผ๋ง๋ ์ง ๋ณ๊ฒฝํ ์ ์๋ ๋ฌธ์์ด์ ์ฌ์ฉํ์ฌ ํ๋กํผํฐ์ ์ด๋ฆ์ ํํํ ์๊ฐ ์๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋ ์ด๋ฅผย **์ฐ๊ด ๋ฐฐ์ด(associative array)**์ด๋ผ ๋ถ๋ฅธ๋ค.
์ฐ๊ด ๋ฐฐ์ด์ ๋์ ์ผ๋ก ์์์ ๊ฐ๊ณผ ์์์ ๋ฌธ์์ด์ ์ฐ๊ด์ง์ด ์ง์ ํ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
์ด์ ๊ด๋ จํ์ฌ '๋์์ํค๋ค(map)'๋ผ๋ ์ฉ์ด๋ ์์ฃผ ์ฌ์ฉํฉ๋๋ค.
์ฆ,ย **"์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ฌธ์์ด(ํ๋กํผํฐ์ ์ด๋ฆ)์ ์์์ ๊ฐ์ผ๋ก ๋์์ํจ๋ค"**์ ๊ฐ์ด ํํํ๊ธฐ๋ ํ๋ค.
ES6์์ ์๋ก ์๊ธด ๋ฌธ๋ฒ์ธ Array.from()
์ ์ฌ์ฉํด์๋ ์ ์ฌ๋ฐฐ์ด์ ๋ฐฐ์ด์ฒ๋ผ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค๋ค.
function from() {
let arr = Array.from(arguments);
arr.forEach((value, key) => {
console.log(`${value} : ${key}`);
});
}
from('1', '2', '3')
์ด์ธ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ๊ฐ๋ฅํ๋ค.
[].forEach.call(['1', '2'], (el) => console.log(el))