๋ฐฐ์ด์ ๊ฐ์ฒด์ ํ ์ข ๋ฅ๋ก์, C๋ ์๋ฐ์๋ ๋ค๋ฅด๊ฒ ๊ธธ์ด๋ฅผ ์ง์ ํ์ง ์์๋ ๋๋ฉฐ ๋ฐ์ดํฐ ํ์ ์ ์์ ๋กญ๋ค.
* ๋ฐฐ์ด ๋ฆฌํฐ๋ด์ ํตํ ๋ฐฐ์ด ์์ฑ
var Arr = ['a', 'b', 'c', 1, true];
console.log(Arr[0]); // a
console.log(Arr[7]); // undefined
console.log(Arr.length); //5
console.log(Arr);
๋ฌธ์์ด, ๋๋ฒ, boolean ๊ฐ์ด ์ ๋ถ ์๋ ๋ฐฐ์ด์ ๋๊ดํธ([])๋ฅผ ํตํด ์๋ก ์์ฑํ์๋ค. ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ์ ๊ทผํ ์ ์์ผ๋ฉฐ, ์ ์๋์ง ์์ ์ธ๋ฑ์ค์ ๊ฐ์ ์ถ๋ ฅํ๊ณ ์ ํ๋ฉด undefined์ด ์ถ๋ ฅ๋๋ค. ๊ฐ์ฒด์์ ํฌํจํ์ง ์์ ๊ฐ์ฒด ํ๋กํผํฐ์ ์ ๊ทผํ์ ๋ undefined๊ฐ ์ถ๋ ฅ๋๋ ๊ฒ๊ณผ ๋์ผํ ์ํฉ์ธ๋ฐ, ๋ฐฐ์ด ์ญ์ ๊ฐ์ฒด์ด๊ธฐ ๋๋ฌธ์ด๋ค.
Arr.length๋ ๋ฐฐ์ด์ length ํ๋กํผํฐ๋ฅผ ์๋ฏธํ๋ฉฐ, ๋ฐฐ์ด์ ์์ ๊ฐ์๋ฅผ ์ ์ ์๋ ํ๋กํผํฐ์ด๋ค. ๋ชจ๋ ๋ฐฐ์ด์ length ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๋ค.
* ๋ฐฐ์ด ์์ ๋์ ์์ฑํ๊ธฐ
var Arr = [];
Arr[0] = 1;
Arr[3] = 10;
Arr[7] = 3;
console.log(Arr);
console.log(Arr.length);
Arr๋ผ๋ ๋น ๋ฐฐ์ด์ ์์ฑํ ํ์ ์ธ ๊ฐ์ ๊ฐ์ ํ ๋นํ์๋ค. ์กด์ฌํ๋ ์ธ๋ฑ์ค ์ค ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ ํ๋ค. ์ ์ฝ๋ ์์์์๋ ๊ฐ์ฅ ํฐ ์ธ๋ฑ์ค๋ก Arr[7]์ ์ ์ธํ์๊ธฐ ๋๋ฌธ์ ๊ธธ์ด๊ฐ 8์ธ ๋ฐฐ์ด์ด ๋๋ ๊ฒ์ด๋ค. ๊ฐ์ด ํ ๋น๋์ง ์์ ์์๋ผ๋ฉด empty๊ฐ ์ถ๋ ฅ๋๋ค. ์ฆ, length ํ๋กํผํฐ ๊ฐ๊ณผ ๋ฐฐ์ด ์์์ ๊ฐ์๊ฐ ํญ์ ๊ฐ์ ๊ฒ์ ์๋๋ค.
์ด ์ํ์์ Arr[10]์ ๊ฐ์ ๋์ ์์ฑํ๋ค๋ฉด Arr.length์ ๊ฐ์ 11์ด ๋ ๊ฒ์ด๋ค. length ๊ฐ์ ๋์ด๋์ง๋ง ์ค์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ทธ๋งํผ ํ ๋น๋๋ ๊ฒ์ ์๋๋ค.
* ๋ฐฐ์ด์ length ํ๋กํผํฐ ๋ช ์์ ๋ณ๊ฒฝํ๊ธฐ
์์ ์์ ๋ฅผ ๊ณ์ํด์ ํ์ฉํด ๋ณด๋๋ก ํ๊ฒ ๋ค.
var Arr = [];
Arr[0] = 1;
Arr[3] = 10;
Arr[7] = 3;
Arr.length = 10; // length๋ฅผ 10์ผ๋ก ๋ณ๊ฒฝ
console.log(Arr); // [1, empty × 2, 10, empty × 3, 3, empty × 2]
Arr.length = 2; // length๋ฅผ 2๋ก ๋ณ๊ฒฝ
console.log(Arr); // [1, empty]
console.log(Arr[3]); // undefined
Arr.length์ ๊ฐ์ ๋์ ํ๋ ๊ฒ๋ง์ผ๋ก ๊ฐ๋จํ๊ฒ ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ Arr๋ฅผ ์ถ๋ ฅํด ๋ณด๋ฉด, ๋์ด๋ ์ธ๋ฑ์ค์ ๋ง์ถ์ด ์๋ ๊ฐ๋ค์ empty๋ก ์ถ๋ ฅ๋๋ค.
10์ด์๋ length๋ฅผ 2๋ก ๋ณ๊ฒฝํ๋ฉด ์์์๋ถํฐ [length-1] ์ธ๋ฑ์ค๊น์ง๋ง ๋จ๊ณ ๋๋จธ์ง๋ ์ญ์ ๋๋ค.
* ๋ฐฐ์ด ํ์ค ๋ฉ์๋ - push()
push() ๋ฉ์๋๋ ์ธ์์ ๊ฐ์ ๋ฐฐ์ด์ ๋์ ์ถ๊ฐํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ค ๋ฐฐ์ด ๋ฉ์๋์ด๋ค.
var arr = [0, 1, 2];
arr.push(3);
console.log(arr); // [0, 1, 2, 3]
arr.length = 5;
console.log(arr); // [0, 1, 2, 3, empty]
arr.push(4);
console.log(arr); // [0, 1, 2, 3, empty, 4]
* ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด
๋ฐฐ์ด์ ๊ฐ์ฒด์ ํ ์ข ๋ฅ์ด์ง๋ง ์ผ๋ฐ ๊ฐ์ฒด์๋ ์ฐจ์ด๊ฐ ์๋ค.
// ๋ฐฐ์ด
var arr = ['a', 'b', 'c'];
// ๊ฐ์ฒด
var obj = {
'0': 'a',
'1': 'b',
'2': 'c'
};
// typeof
console.log(typeof arr); // object
console.log(typeof obj); // object
// length
console.log(arr.length); // 3
console.log(obj.length); // undefined
// push ๋ฉ์๋ (๋ฐฐ์ด ํ์ค ๋ฉ์๋)
arr.push('d');
obj.push('d'); // ์๋ฌ ๋ฐ์
์ผ๋ฐ ๊ฐ์ฒด์ธ obj๋ length ํ๋กํผํฐ๊ฐ ์กด์ฌํ์ง ์์ผ๋ฏ๋ก undefined๊ฐ ์ถ๋ ฅ๋๋ค. ๋ํ ๋ฐฐ์ด ํ์ค ๋ฉ์๋์ธ push() ์ญ์ ์ผ๋ฐ ๊ฐ์ฒด์์๋ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค. ๊ฐ์ฒด์ ๋ถ๋ชจ ๊ฐ์ฒด, ์ฆ ํ๋กํ ํ์ ์ Object.prototype ๊ฐ์ฒด์ด๊ณ , ๋ฐฐ์ด์ ํ๋กํ ํ์ ์ Array.prototype ๊ฐ์ฒด์ด๋ค. ์ด ๋ ํ๋กํ ํ์ ๊ฐ์ฒด๋ ์๋ก ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์์ ๊ฐ์ ์์ ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฏ๋ก ๋ฐฐ์ด์์๋ Array.prototype์ ๋ฉ์๋, Object.prototype์ ๋ฉ์๋๋ฅผ ์ ๋ถ ์ฌ์ฉํ ์ ์๋ค.
๋ฐฐ์ด์ ํ๋กํ ํ์ ์ ๊ทธ๋ฆผ์์ ๊ฐ์ฅ ํ๋จ์ ์๋ __proto__๋ Array.prototype์ด ์์ํ๊ณ ์๋ Object.prototype์ ์๋ฏธํ๋ค.
* ๋ฐฐ์ด์ ํ๋กํผํฐ ๋์ ์์ฑ
๋ฐฐ์ด์์๋ ์ผ๋ฐ ๊ฐ์ฒด์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋์ ์ผ๋ก ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
var arr = ['a', 'b', 'c'];
arr.color = 'blue';
arr.name = 'array test';
console.log(arr);
arr[3] = 'd';
console.log(arr.length); // 4
๋ฐฐ์ด๋ ๊ฐ์ฒด์ ๋ง์ฐฌ๊ฐ์ง๋ก 'key':'value' ํํ๋ก ๋ฐฐ์ด ์์์ ํ๋กํผํฐ ๋ฑ์ ๊ฐ์ง๊ณ ์๋ค. ๋ง์ฝ arr[0] = 'aaa'; ๋ผ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค๋ฉด ๊ฐ์ฒด ํ๋กํผํฐ๋ฅผ ์์ ํ ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐฐ์ด ์์์ ๊ฐ์ด ๊ฐฑ์ ๋๋ค.
ํ๋กํผํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฒด์ length์๋ ๋ณํ๊ฐ ์๊ณ , ๋ฐฐ์ด ์์๋ฅผ ์ถ๊ฐํ์ ๋ length ๊ฐ์ด ๊ฐฑ์ ๋๋ค.
โป ์ฐธ๊ณ . console.log์ ๋๊ธฐ์ ์คํ
"this value was evaluated upon first expanding. it may have changed since then." ๊ด๋ จ
var arr = ['a', 'b', 'c'];
console.log(arr); // ["a", "b", "c"]
arr[0] = 'aaa';
console.log(arr); // ["aaa", "b", "c"]

์ฒซ๋ฒ์งธ console.log์๋ ์ธ๋ฑ์ค 0์ ๊ฐ์ด a๋ก ๋ํ๋์ง๋ง, ํ์ดํ๋ฅผ ํ์ฅํ์ ๋์ ๊ฐ์ aaa๊ฐ ๋๋ค. i์ ๋ง์ฐ์ค๋ฅผ ๊ฐ์ ธ๋ค ๋๋ฉด "this value was evaluated upon first expanding. it may have changed since then." ๋ผ๋ ์๋ฆผ์ด ๋ฌ๋ค.
ํ์ดํ๋ฅผ ๋๋ฌ ํ์ฅํ์ ๋์ ๊ฐ์ ๊ฐ์ฒด์ ํ์ฌ ์ํ, ์ฆ ๋ฐ๋๊ณ ๋ ์ํ๊ฐ ๋๊ธฐ ๋๋ฌธ์ aaa ๊ฐ์ด ์ถ๋ ฅ๋๋ ๊ฒ์ด๋ค.
console.log๋ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์๋ํ๋ค. ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๋ฅผ ๋๊ธฐ์ ์ผ๋ก ์์ ํ์ง๋ง ํ์ฅ๋ ๋๊น์ง๋ ๊ฐ์ฒด์ ์์ฑ์ ํ์ํ์ง ์๋๋ค. ๊ทธ๋ฌ๋ค๊ฐ ํ์ฅํ์ ๋๋ ๊ฐ์ฒด์ ํ์ฌ ์ํ๋ฅผ ๋ํ๋ธ๋ค.
์ด๋ฌํ ๊ฒฝ์ฐ์ ํด๋น ์์ ์ ๋ก๊ทธ๋ฅผ ํ์ธํ๊ธฐ ์ํด์๋ ๋๋ฒ๊ฑฐ๋ฅผ ์ด์ฉํ๊ฑฐ๋ ์์ ๋ณ๋ก ์ฝ์์ ์ฐ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
console.log(arr[0], arr[1], arr[2])์ ๊ฐ์ด ํ๋ฉด ๋๋ค.
* ๋ฐฐ์ด ํ๋กํผํฐ ์ด๊ฑฐ
// ํ๋กํผํฐ๊น์ง ์ถ๋ ฅ
for(var prop in arr){
console.log(prop, arr[prop]);
}
// ๋ฐฐ์ด ์์๋ง ์ถ๋ ฅ
for(var i=0; i<arr.length; i++){
console.log(i, arr[i]);
}
* ๋ฐฐ์ด ์์ ์ญ์
- delete ์ฐ์ฐ์
var arr = ['a', 'b', 'c'];
delete arr[0];
console.log(arr); // [empty, "b", "c"]
console.log(arr.length); // 3
delete ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐฐ์ด์ ์์๊ฐ undefined๊ฐ ๋๋ ๊ฒ์ผ ๋ฟ, ์์ ํ ์ญ์ ๋๋ ๊ฒ์ ์๋๋ค.
- splice(start, deleteCount, items)
start : ์ญ์ ๋ฅผ ์์ํ ์์น
deleteCount : ์ญ์ ํ ์์์ ์
items : ์ญ์ ํ ์์น์ ์ถ๊ฐํ ์์ (์ฌ๋ฌ ๊ฐ ๊ฐ๋ฅ, ์๋ต ๊ฐ๋ฅ)
var arr = ['a', 'b', 'c'];
arr.splice(0, 1);
console.log(arr); // ["b", "c"]
console.log(arr.length); // 2
var arr = ['a', 'b', 'c'];
arr.splice(0, 1, 'zzz', 'xxx', 'yyy');
console.log(arr); // ["zzz", "xxx", "yyy", "b", "c"]
console.log(arr.length); // 5
์น์คํฐ์์๋ ์ด ๋ณ์๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง๋ ํ์ํด ์ค๋ค. ๋งค์ฐ ํธ๋ฆฌํจ.
* Array ์์ฑ์ ํจ์
์์ ์ดํด๋ณธ ๊ฒ๊ณผ ๊ฐ์ด ๋ฐฐ์ด์ ๋ฐฐ์ด ๋ฆฌํฐ๋ด๋ก ์์ฑํ ์๋ ์์ง๋ง Array() ์์ฑ์ ํจ์๋ฅผ ํตํด ์์ฑํ ์๋ ์๋ค.
// ๊ธธ์ด๊ฐ 3์ธ ๋ฐฐ์ด ์์ฑ. ์์๋ ์ ๋ถ undefined
var foo = new Array(3);
console.log(foo);
// 1, 2, 3 ์ด๋ผ๋ ์์๋ฅผ ๊ฐ์ง๋ ๋ฐฐ์ด ์์ฑ
var foo2 = new Array(1, 2, 3);
console.log(foo2);
* ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด
๋ฐฐ์ด์ ํ๋กํ ํ์ ์ธ Array.prototype๋ length ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , ๋ฐฐ์ด์ ์ด๋ฅผ ์์ํ์ฌ length ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์์น์ ์ผ๋ก ์ผ๋ฐ ๊ฐ์ฒด๋ length๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ์ง๋ง, length ํ๋กํผํฐ๋ฅผ ๊ฐ์ง ์ผ๋ฐ ๊ฐ์ฒด๋ผ๋ฉด ์ฌ์ฉํ ์ ์๋ค. ์ด๋ฌํ ์ผ๋ฐ ๊ฐ์ฒด๋ฅผ ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด(array-like objects)๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด๋ ์ผ๋ฐ ๊ฐ์ฒด์์๋ ์๋ฐ ์คํฌ๋ฆฝํธ์ ํ์ค ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
// ๋ฐฐ์ด
var arr = ['bar'];
// ๊ฐ์ฒด
var obj = {
name: 'foo',
length: 1
};
arr.push('baz');
console.log(arr); // ['bar', 'baz']
Array.prototype.push.apply(obj, ['baz']); // ์ผ๋ฐ ๊ฐ์ฒด์ push() ๋ฉ์๋ ํธ์ถํด์ 'baz' ์์ ์ถ๊ฐ
console.log(obj); // {1: "baz", name: "foo", length: 2}
์ผ๋ฐ ๊ฐ์ฒด๋ obj.push('baz')์ ๊ฐ์ด push ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค. ํ์ง๋ง obj๋ length ํ๋กํผํฐ๋ฅผ ๊ฐ์ง ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด์ด๋ฏ๋ก apply() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ค ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ํ์ฉํ ์ ์๋ค. '1' ํ๋กํผํฐ์ 'baz' ๊ฐ์ด ์ถ๊ฐ๋ ๊ฒ์ ์ถ๋ ฅ๊ฐ์ผ๋ก ํ์ธํ ์ ์๋ค.
'๐ปStudy > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ธฐ๋ณธ ํ์ ๊ณผ ํ์ค ๋ฉ์๋ / ์ฐ์ฐ์ (0) | 2021.03.09 |
---|---|
ํ๋กํ ํ์ (0) | 2021.03.05 |
์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐ์ดํฐ ํ์ (0) | 2021.02.09 |
์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์์ ํต์ฌ ๊ฐ๋ (0) | 2021.02.09 |