๐ Chapter 2 : ๊ฐ
Table of Contents
๐ฏ ๋ฐฐ์ดโ
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด์ ํ์ ์ด ์๊ฒฉํ ๋ค๋ฅธ ์ธ์ด์ ๋ฌ๋ฆฌ ๋ฌธ์์ด, ์ซ์, ๊ฐ์ฒด ์ฌ์ง์ด ๋ค๋ฅธ ๋ฐฐ์ด์ด๋ ์ด๋ค ํ์ ์ ๊ฐ์ด๋ผ๋ ๋ด์ ์ ์๋ ๊ทธ๋ฆ์ด๋ค.
var a = [1, "2", [3]];
a.length; // 3
a[0] === 1; // true
a[2][0] === 3; // true
- ๋ฐฐ์ด ํฌ๊ธฐ๋ ๋ฏธ๋ฆฌ ์ ํ์ง ์๊ณ ๋ ์ ์ธํ ์ ์์ผ๋ฉฐ ์ํ๋ ๊ฐ์ ์ถ๊ฐํ๋ฉด ๋๋ค.
var a = [];
a.length; // 0
a[0] = 1;
a[1] = "2";
a[2] = [3];
a.length; // 3
- ๋น ์ฌ๋กฏ์ด ์๋ ๋ฐฐ์ด์ ๋ค๋ฃฐ ๋๋ ์กฐ์ฌํด์ผ ํ๋ค.
var a = [];
a[0] = 1;
// a[1]์ด ๋น ์ง
a[2] = [3];
a.length; // 3
- ์คํ์ ๋์ง๋ง ์ด๋ฐ ์ฝ๋์์ ์ค๊ฐ์ ๊ฑด๋๋ด ๋น ์ฌ๋กฏ์ ํผ๋์ ์ค ์ ์๋ค.
- ์ ์์ ์์
a[1]
์ฌ๋กฏ ๊ฐ์undefinded
๊ฐ ๋ ๊ฑฐ ๊ฐ์ง๋ง, ๋ช ์์ ์ผ๋กa[1] = undefined
๋ผ ์ธํ ํ ๊ฒ๊ณผ ๋๊ฐ์ง๋ ์๋ค. - ๋ฐฐ์ด ์ธ๋ฑ์ค๋ ์ซ์์ธ๋ฐ, ๋ฐฐ์ด ์์ฒด๋ ํ๋์ ๊ฐ์ฒด์ฌ์ ํค/ํ๋กํผํฐ ๋ฌธ์์ด์ ์ถ๊ฐํ ์ ์๋ค. (๋ฐฐ์ด
length
๊ฐ ์ฆ๊ฐํ์ง๋ ์๋๋ค.)
var a = [];
a[0] = 1;
a["foobar"] = 2;
a.length; // 1
a["foobar"] // 2
a.foobar; // 2
- ํค๋ก ๋ฃ์ ๋ฌธ์์ด ๊ฐ์ด ํ์ค 10์ง์ ์ซ์๋ก ํ์ ์ด ๋ฐ๋๋ฉด, ๋ง์น ๋ฌธ์์ด ํค๊ฐ ์๋ ์ซ์ ํค๋ฅผ ์ฌ์ฉํ ๊ฑฐ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ด๋๋๋ค.
var a = [];
a["13"] = 42;
a.length; // 14
๐ ์ ์ฌ ๋ฐฐ์ดโ
- ์ ์ฌ ๋ฐฐ์ด ๊ฐ(์ซ์ ์ธ๋ฑ์ค๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ๋ค์ ์งํฉ)์ ์ง์ง ๋ฐฐ์ด๋ก ๋ฐ๊พธ๊ณ ์ถ์ ๋๊ฐ ์๋ค.
- ์ด๋ด ๋๋ ๋ฐฐ์ด ์ ํธ๋ฆฌํฐ ํจ์(
indexOf()
,forEach()
,concat()
๋ฑ)๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
function foo() {
// arguments ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ES6๋ถํฐ ๋น ๊ถ์ฅ
var arr = Array.prototype.slice.call(arguments);
arr.push("bam");
console.log(arr);
}
foo("bar", "baz"); // ["bar", "baz", "bam"]
- ์์ ๊ฐ์ ๋ณํ์
slice()
ํจ์์ ๊ธฐ๋ฅ์ ์ฐจ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ค. - ES6 ๋ถํฐ๋ ๊ธฐ๋ณธ ๋ด์ฅ ํจ์
Array.from()
์ด ์ด ์ผ์ ๋์ ํ๋ค.
var arr = Array.from(arguments);
๐ฏ ๋ฌธ์์ดโ
- ํํ ๋ฌธ์์ด์ ๋จ์ง ๋ฌธ์์ ๋ฐฐ์ด์ด๋ผ๊ณ ์๊ฐํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ์์ด์ ์ค์ ๋ก ์๊น์๋ง ๋น์ทํ ๋ฟ ๋ฌธ์ ๋ฐฐ์ด๊ณผ ๊ฐ์ง ์๋ค.
var a = 'foo';
var b = ['f', 'o', 'o'];
- ๋ฌธ์์ด์ ๋ฐฐ์ด๊ณผ ๊ฒ๋ชจ์ต์ด ๋ฎ์๋ค.(์ ์ฌ ๋ฐฐ์ด์ด๋ค.).
- ๋ ๋ค
length
ํ๋กํผํฐ,indexOf()
๋ฉ์๋(ES5 ๋ฐฐ์ด์๋ง ์์),concat()
๋ฉ์๋๋ฅผ ๊ฐ์ง๋ค
a.length; // 3
b.length; // 3
a.indexOf('o'); // 1
b.indexOf('o'); // 1
var c = a.concat('bar'); // foobar
var d = b.concat(['b', 'a', 'r']); // ['f', 'o', 'o', 'b', 'a', 'r']
a === c; // false
b === d; // false
a; // foo
b; // ['f', 'o', 'o']
- ๊ทธ๋ ๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๋ ๋ค '๋ฌธ์์ ๋ฐฐ์ด'์ด๋ผ๊ณ ํ ์ ์์๊น? ๊ทธ๋ ์ง ์๋ค.
a[i] = '0';
b[i] = '0';
a; // foo
b; // ['f', 'O', 'o']
- ๋ฌธ์์ด์ ๋ถ๋ณ ๊ฐ(
Immutable
) ์ด์ง๋ง ๋ฐฐ์ด์ ๊ฐ๋ณ ๊ฐ(Mutable
) ์ด๋ค. a[1]
์ฒ๋ผ ๋ฌธ์์ด์ ํน์ ๋ฌธ์๋ฅผ ์ ๊ทผํ๋ ํํ๊ฐ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์ ์ ํจํ ๊ฒ์ ์๋๋ค. (์ต์คํ๋ก๋ฌ ๊ตฌ๋ฒ์ ์ ๋ฌธ๋ฒ ์๋ฌ๋ก ์ธ์)- ๋ฌธ์์ด์ ๋ถ๋ณ ๊ฐ์ด๋ฏ๋ก ๋ฌธ์์ด ๋ฉ์๋๋ ๊ทธ ๋ด์ฉ์ ๋ฐ๋ก ๋ณ๊ฒฝํ์ง ์๊ณ ํญ์ ์๋ก์ด ๋ฌธ์์ด์ ์์ฑํ ํ ๋ฐํํ๋ค.
- ๋ฐ๋ฉด์ ๋๋ถ๋ถ์ ๋ฐฐ์ด ๋ฉ์๋๋ ๊ทธ ์๋ฆฌ์์ ๊ณง๋ฐ๋ก ์์๋ฅผ ์์ ํ๋ค.
c = a.toUpperCase();
a === c; //false
a; // foo
c; // FOO
b.push('!');
b; // ['f','O', 'o', '!']
- ๋ฌธ์์ด์ ๋ค๋ฃฐ ๋ ์ ์ฉํ ๋๋ถ๋ถ์ ๋ฐฐ์ด ๋ฉ์๋๋ ์ฌ์ค์ ๋ฌธ์์ด์ ์ธ ์ ์์ง๋ง, ๋ฌธ์์ด์ ๋ํด ๋ถ๋ณ ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ๋น๋ ค ์ธ ์๋ ์๋ค.
a.join; // undefined
a.map; // undefined
var c = Array.prototype.join.call(a, '-');
var d = Array.prototype.map.call(a, function(v) {
return v.toUpperCase() + '.';
}).join('');
c; // "f-o-o"
d; // "F.O.O."
- ๋ฌธ์์ด์ ์์๋ก ๊ฑฐ๊พธ๋ก ๋ค์ง์ ์ ์๋ค.
- ๋ฐฐ์ด์ ๋
reverse()
๋ผ๋ ๊ฐ๋ณ ๋ฉ์๋๊ฐ ์ค๋น๋์ด ์์ง๋ง, ๋ฌธ์์ด์ ๊ทธ๋ ์ง ์๋ค.
a.reverse; // undefined
b.reverse(); // ["!", "o", "o", "f"]
b; // ["!", "o", "o", "f"]