Bibi's DevLog ๐ค๐
[์ธํ๋ฐ] Javascript ์ ๋ฌธ - ๋ฐฐ์ด๊ณผ ๋ฌธ์์ด1 [ ๋ฐฐ์ด, ์์, ์ธ๋ฑ์ค, undefined, typeof, length, immutable/mutable, ๊ฐ์ฒด/์์ฑ/๋ฉ์๋, push()/pop(), unshift()/shift() ] ๋ณธ๋ฌธ
[์ธํ๋ฐ] Javascript ์ ๋ฌธ - ๋ฐฐ์ด๊ณผ ๋ฌธ์์ด1 [ ๋ฐฐ์ด, ์์, ์ธ๋ฑ์ค, undefined, typeof, length, immutable/mutable, ๊ฐ์ฒด/์์ฑ/๋ฉ์๋, push()/pop(), unshift()/shift() ]
๋น๋น bibi 2020. 10. 12. 18:27* ์ด ๊ธ์ ์ธํ๋ฐ์์ ์ ๊ณตํ๋ ํธ๋ ์ค๋์ ์ ๋ฃ ๊ฐ์ '์ฝ๊ณ ์์ฐ์ค๋ฝ๊ฒ ๋ฐฐ์๋ณด๋ Javascript ์ ๋ฌธ - ์ฝ๋์ค์ฟผ๋ ๋ง์คํฐ์ฆ ์ฝ์ค ๋ ๋ฒจ1'๋ฅผ ๋ฃ๊ณ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ๊ฐ์ ๋ด์ฉ์ ๋ํด, ์ ๊ฐ ํ๊ธฐํ๊ณ ๊ตฌ๊ธ๋งํ ๋ด์ฉ์ด ์ ๋ฆฌ๋์ด ์์ต๋๋ค. ์ด๋ณด์ธ ์ ๊ฐ ์ดํดํ ๋๋ก ์ ๋ฆฌํ๊ธฐ ๋๋ฌธ์, ๋ถ์ ํํ ๋ด์ฉ์ด ์์ ์ ์์์ ๊ฐ์ํด ์ฃผ์๊ธธ ๋ฐ๋๋๋ค. ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ด๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค๋ ์ธํ๋ฐ ์ธก ๋ต๋ณ์ ๋ฐ์ ์ ์ด ์์ผ๋(https://bibi6666667.tistory.com/37), ์ ์๊ถ์ ๋ฌธ์ ๊ฐ ๋๋ค๋ฉด ๋ณดํธ ๋ชจ๋(๋น๊ณต๊ฐ)๋ก ์ ํํ๊ฒ ์ต๋๋ค.
๋ฐฐ์ด๊ณผ ๋ฌธ์์ด 1
๋ฐฐ์ด (Array)
์๋ฐ์คํฌ๋ฆฝํธ์์ "๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ"์ ํ๋.
๋ฐ๋ผ์ ๊ต์ฅํ ์ค์ํ๋ค! (๋ฐฐ์ด, ํด์ฌ๊ฐ ๊ฐ์ฅ ์ค์)
์ฃผ๋ก ๊ฐ์ ์ข
๋ฅ์ ๊ฐ ์ฌ๋ฌ ๊ฐ๋ฅผ ๋ฌถ์ด์, ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํฉ๋๋ค.
(๊ฐ์ ์ฉ๋, ๊ฐ์ ํ์
์ ๊ฐ๋ค)
๋ฐฐ์ด ์์/์์(element)
๋ฐฐ์ด์ ๊ตฌ์ฑํ๋ ๊ฐ๊ฐ์ ๊ฐ.
โป์ฐธ๊ณ ๋ก ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ฐฐ์ด์ "๊ฐ์ฒดObject"์
๋๋ค.
(๋ฐฐ์ด๊ฐ์ฒด array object = ๋ฐฐ์ด์ด๋ฉด์ ๊ฐ์ฒด์ด๋ค. ์ผ๋ฐ ๊ฐ์ฒด์๋ ์ฝ๊ฐ ๋ค๋ฅด๋ค.)
๊ฐ์ฒด์ ๋ํด์๋ ๋ค์์ ๋ค์ ๋ฐฐ์๋๋ค.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array(๋์ค์ ๋ค ์ดํด๋ ๋ด์ฉ์ด๋ ์ฐธ๊ณ ๋ง!)
๋ฐฐ์ด ๋ง๋ค๊ธฐ 1
var arr = []; // ๋น์ด์๋ ๋ฐฐ์ด์ ์ ์ธํจ.
typeof arr // "object". ์ฆ ๋ฐฐ์ด๋ ๊ฐ์ฒด์ด๋ค.
๋ฐฐ์ด ๋ง๋ค๊ธฐ(์ ์ธํ๊ธฐ)
๋๊ดํธ ์์ ๋ฐฐ์ด ์์๋ค์ ์ผํ๋ก ๊ตฌ๋ถํด ๋์ดํ๋ ๋ฐฉ์.
var arr = [๋ฐฐ์ด์์1, ๋ฐฐ์ด์์2, ...];
var arr2 = [50, 60, 70, 99];
arr2; // โถ (4) [50, 60, 70, 99]
โถ (4) [50, 60, 70, 99]
(4) ๋ ๋ฐฐ์ด์ ์์๊ฐ 4๊ฐ์์ ์๋ฏธ.
[50, 60, 70, 99]๋ ์ด ๋ฐฐ์ด์ ํํ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ.
var scores = [50, 60, 70];
console.log(scores);
console.log(scores.length);
์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด์ ๋ฐฐ์ด์ ์์ ์ฝ๊ธฐ (๋ฐฐ์ด์ ์ฐธ์กฐ)
์ธ๋ฑ์ค index = ๋ฐฐ์ด์์์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ์ซ์.
๋ฐฐ์ด์ด๋ฆ[์ธ๋ฑ์ค];
๋ฐฐ์ด์ ๊ฐ ์์๋ฅผ ์ธ๋ฑ์ค๋ก ์ฐธ์กฐํ๋ค.
๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์์ ์ธ๋ฑ์ค = [0]
๋ฐฐ์ด์ ๋ ๋ฒ์จฐ ์์์ ์ธ๋ฑ์ค = [1]..
์ปดํจํฐ๋ ํญ์ 0๋ถํฐ ์ผ๋ค.
์ฆ 0๋ฒ์งธ = 1๋ฒ์งธ, 1๋ฒ์งธ = 2๋ฒ์งธ, 4๋ฒ์งธ = 5๋ฒ์งธ..
์๋ ๊ฐ์ ์ฐพ์ผ๋ ค๊ณ ํ๋ฉด undefined (๊ฐ์ด ์ ์๋์ง ์์)๊ฐ ์ถ๋ ฅ๋๋ค.
scores[0]; // 50์ด ์ถ๋ ฅ๋๋ค.
scores[3]; // undefined๊ฐ ์ถ๋ ฅ๋๋ค. 70์ ์ถ๋ ฅํ๊ธฐ ์ํด์๋ scores[2];๋ก ์
๋ ฅํด์ผ ํ๋ค.
โป undefined๋?
: ๋์์ ์กด์ฌํ์ง๋ง ๊ฐ์ด ์์. (๊ฐ์ด ์ ์๋์ง ์์)
c // ์๋ฌ. c is not defined
var c;
c // ์๋ฌ ๋์ undefined. c๋ผ๋ ๋์์ ์กด์ฌํ์ง๋ง ๊ฐ์ด ์ ์๋์ง ์์.
๋ฐฐ์ด์ ๊ฐ ์ฐ๊ธฐ(๋ฐฐ์ด์ ์์ ๊ฐ ์์ฑ & ์์ ํ๊ธฐ)
๋ฐฐ์ด์ด๋ฆ[์ธ๋ฑ์ค] = ๊ฐ;
ํด๋น ๋ฐฐ์ด์ ์ธ๋ฑ์ค ๋ฒํธ์ ์ฐํญ์ ๊ฐ์ด ๋ค์ด๊ฐ๋ค.
scores[0] = 100;
scores[9] = 50;
var arr3 = [2, 4, 6, 8, 10];
arr3[0] // 2
arr[5] // undefined. '10'์ [4]๋ฒ์งธ ๊ฐ์ด๋ค (์ปดํจํฐ๋ 0๋ฒ์งธ๋ถํฐ ์์)
arr[4] // 10
๋ฐฐ์ด ๋ง๋ค๊ธฐ 2
var a = []; a[0] = 2; a[1] = 4;
var a = [];
a[0] = 2;
a[1] = 4;
๋น์ด ์๋ ๋ฐฐ์ด์ ๋ง๋ ๋ค 0๋ฒ์งธ, 1๋ฒ์งธ, 2๋ฒ์งธ .. ๊ฐ์ ์ฝ์ ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
โป a[0] = 10, a[1] = 20, a[4] = 100 ์ ์ ๋ ฅํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
-> a = [10, 20, empty *2, 100]์ด๋ผ๋ ๋ฐฐ์ด์ด ์์ฑ๋๋ค.
์ ์ํ์ง ์์ 2๋ฒ์งธ, 3๋ฒ์งธ ๊ฐ์ empty๋ก ๋ค์ด๊ฐ๊ณ ,
a[2] = a[3] = undefined๋ก ์ถ๋ ฅ๋๋ค.
๋ฐฐ์ด์ ํ์ ์์๋ณด๊ธฐ
typeof ๋์;
๋์์ ํ์ (์๋ฃํ)์ ์๋ ค์ค.
์ซ์ = number, ๋ฌธ์์ด = string, undefined = undefinedํ์ ..
typeof scores
typeof scores[0]
๋ฐฐ์ด์ ๊ธธ์ด ๊ตฌํ๊ธฐ
๋ฐฐ์ด์ด๋ฆ.length;
๋ฐฐ์ด์ ๊ธธ์ด = ์์์ ๊ฐฏ์๋ฅผ ๊ตฌํด ์ค.
scores.length;
โป a = [10, 20, empty *2, 100] ์ ๊ธธ์ด๋ ์ด๋ป๊ฒ ๋์ฌ๊น?
-> a.length; ์ ๊ฒฐ๊ณผ๋ 5์ด๋ค.
์ฆ ๋น์ด ์๋ ์๋ฆฌ๋ ๋ฐฐ์ด์ ์์๋ก ์ณ ์ค๋ค.
โป x = [1]
x.length = 10 ์ผ๋ก ์ ์ํ๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
-> x = [1, empty * 9].
์ฆ empty๋ก ๋น ์๋ฆฌ๋ฅผ ์ฑ์ ๋ฐฐ์ด์ ๊ธธ์ด๊ฐ ๋์ด๋๋ค.
๋ฐฐ์ด์ ๋ง์ง๋ง ์์๋ฅผ ์ฝ์ด ์ค๋ ค๋ฉด?
๋ฐฐ์ด์ด ๋งค์ฐ ๊ธธ ๋, ๋ง์ง๋ง ์์๋ฅผ ์ฝ์ด์ค๊ณ ์ถ๋ค๋ฉด??
์๋ฅผ ๋ค์ด ๊ธธ์ด๊ฐ 6์ธ ๋ฐฐ์ด var a=[1, 2, 3, 4, 5, 6]; ์์ ๋ง์ง๋ง ์์๋ a[5] = 6.
์ฆ ๋ง์ง๋ง ์์์ ์ธ๋ฑ์ค์ธ ๋ฐฐ์ด์ ๊ธธ์ด -1์ ํ์ฉํ๋ค.
-> ๋ฐฐ์ด์ด๋ฆ[๋ฐฐ์ด์ด๋ฆ.length -1];
scores[scores.length - 1];
๊ฐ์ ๋ฐฉ์์ผ๋ก, ๋ฐฐ์ด์ ๋งจ ๋ค์์ ๋ ๋ฒ์งธ ์์๋ฅผ ์ฝ์ด์ค๊ณ ์ถ๋ค๋ฉด??
-> ๋ฐฐ์ด์ด๋ฆ[๋ฐฐ์ด์ด๋ฆ.length -2];
๋ฌธ์์ด๊ณผ ๋ฐฐ์ด
- ๋ฌธ์์ด๊ณผ ๋ฐฐ์ด์ ๋น์ทํ ์ฑ์ง์ ๋ง์ด ๊ฐ์ง๊ณ ์์ต๋๋ค.
- ์ ์ด์ ๋ฌธ์์ด = '๋ฌธ์์ ๋ฐฐ์ด' ์ด๋ผ๋ ๋ป์ด๊ธฐ ๋๋ฌธ. ๋น์ทํ ์ ๋ฐ์ ์๋ค.
but ์์๋ฌ์ผ ํ ๋ฌธ์์ด๊ณผ ๋ฐฐ์ด์ ์ฐจ์ด์ :
- ๋ฌธ์์ด: Immutable ๋ฐ๊ฟ ์ ์๋ค.
- ๋ฐฐ์ด: Mutable ๋ฐ๊ฟ ์ ์๋ค.
์ฆ ๋ฌธ์์ด์ ํ๋ฒ ์ ์ธํด ๋๋ฉด ์ผ๋ถ๋ฅผ ์ธ๋ฑ์ค๋ก ์์ ํ ์ ์์ง๋ง, ๋ฐฐ์ด์ ์ผ๋ถ๋ฅผ ์ธ๋ฑ์ค๋ก ์์ ํ ์ ์๋ค.
( ์ผ๋จ์ ์ด๋ฐ ์์ฑ์ด ์๋ค๋ ๊ฒ์ ์์๋๊ณ ๋์ด๊ฐ๊ธฐ )
- ๋ฐฐ์ด์ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ฌธ์์ด์๋ ํ ์คํธํด๋ณด์ธ์.
โปํ ์คํธ ์์
var str = "hello";
str.length // 5
str[0] // "h"
// ์ด๋..
str[0] = "k" // ๋ก ์ฌ์ ์ํ์ฌ "hello"๋ฅผ "kello"๋ก ๋ฐ๊ฟ ์ ์๋๊ฐ?
str; // "hello"
// ์ ๋๋ค. ๋ฌธ์์ด์ immutable ์ฆ ๋ณํ์ง ์๊ธฐ ๋๋ฌธ.
//////////////////////////////////
var arr = str.split("");
arr = ["h", "e", "l", "l", "o"]; // "hello"์ ๊ฐ ๊ธ์๋ฅผ ๋ด์ ๋ฐฐ์ด๋ก ๋ง๋ฆ.
// ์ด๋..
arr[0] = "k" // ๋ก ์ฌ์ ์ํ์ฌ "hello"๋ฅผ "kello"๋ก ๋ฐ๊ฟ ์ ์๋๊ฐ?
arr; // ["k", "e", "l", "l", "o"];
// ๋๋ค. ๋ฐฐ์ด์ mutable ์ฆ ๋ณํ ์ ์๊ธฐ ๋๋ฌธ.
๋ฐฐ์ด์ ๋ฉ์๋๋ค 1
์ฐธ๊ณ : ๊ฐ์ฒด, ์์ฑ, ๋ฉ์๋์ ๊ฐ๋ ์ดํด bamtol.net/v5/bbs/board.php?bo_table=pp_js&wr_id=84
๊ฐ์ฒดobject๋ ์์ฑproperty๊ณผ ๋ฉ์๋method๊ฐ ์๋ค.
-๋ชจ๋ ๊ฐ์ฒด๋ ์์ฑ(property, ํ๋กํผํฐ) ์ ๊ฐ์ง๋ค.
(ex. window๊ฐ์ฒด๋ location๋ฑ์ ์์ฑ์, img๊ฐ์ฒด๋ width, height ๋ฑ์ ์์ฑ์ ๊ฐ์ง ์ ์๋ค.
-๊ฐ์ฒด์ ๋์๊ณผ ๊ด๋ จ๋ ๊ฒ์ด ๋ฉ์๋(method, ๋ฉ์๋)์ด๋ค.
(ex. window๊ฐ์ฒด์ alert() ๋ฉ์๋๋ฅผ ์ถ๊ฐํด ์๋์ฐ ์ฐฝ์์ ๊ฒฝ๊ณ ์ฐฝ์ ์ด์ด์ค ์ ์๋ค.)
์๋ฅผ ๋ค์ด..
"ํ ๋ผ"๋ผ๋ ๊ฐ์ฒด๊ฐ ์๋ค๋ฉด,
์ด ๊ฐ์ฒด์ ์์ฑ์๋ "์๊น=ํฐ์", "๊ท=๊ธธ๋ค" ๋ฑ์ด ์์ ๊ฒ.
์ด ๊ฐ์ฒด์ ๋ฉ์๋๋ "๋ฐ์ด๋ค๋๋ค", "ํ์ ๋จน๋๋ค" ๋ฑ์ด ์์ ๊ฒ.
๋ฐฐ์ด๋ ๊ฐ์ฒด์ด๋ฏ๋ก ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๊ฐ์ง๋ค.
์ง๊ธ์ ๋ฐฐ์ด์ ๋ฉ์๋ ์ค ์ ์ฉํ 4๊ฐ์ง๋ง ์์๋ณผ ๊ฒ.
push() <-> pop()
push(value);
๋งจ ๋ค์ ๊ฐ์ ๋ฃ๋ ๋ฉ์๋.
๋ฐฐ์ด์ ๋ง์ง๋ง ์์๋ก value๋ฅผ ์๋ก ์ฝ์ ํฉ๋๋ค.
var b = [];
b.push(1)
b; // [1]
// ๋น์ด ์๋ ๋ฐฐ์ด b์ 1์ด๋ผ๋ ์์๋ฅผ ๋ฐ์ด๋ฃ์.
b.push(2)
b; // [1, 2]
// ๋ฐฐ์ด b์ ๋งจ ๋ค์ 2๋ผ๋ ์์๋ฅผ ๋ฐ์ด๋ฃ์.
b.push(3)
b.push(3)
b; // [1, 2, 3, 4]
pop();
๋งจ ๋ค์ ๊ฐ์ ๋ฝ๋ ๋ฉ์๋.
push()์ ๋ฐ๋ ๊ฐ๋ .
๋ฐฐ์ด์ ๋ง์ง๋ง ์์๋ฅผ ๋นผ์ ๋ณ์์ ๋ฃ์ด ์ค๋๋ค.
์ด ๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ 1 ๊ฐ์ํฉ๋๋ค.
b = [1, 2, 3, 4];
b.pop(); // 4๊ฐ ์ถ๋ ฅ.
// b๋ผ๋ ๋ฐฐ์ด์ ๋งจ ๋ ์์ ํ๋๋ฅผ ๋ฝ์์ด.
// .pop()๋ก ๋ฝ์ ์จ ๊ฒ์ ํ์ฉํ๋ ค๋ฉด, ๋ณ์๋ฅผ ์๋ก ์ ์ํด ๊ฑฐ๊ธฐ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
b = [1, 2, 3];
var x = b.pop();
x; // 3
b = [1, 2];
//๋ฌธ์ ?
b = []; // ๋น์ด ์๋ ๋ฐฐ์ด.
b.pop(); //์ ๊ฒฐ๊ณผ๋? undefined ์ด๋ค. ๊บผ๋ผ ๊ฒ ์์ผ๋ฏ๋ก..
์คํ(์ ์ ๋๋ฏธ๋ฅผ ์์์ ์์์ ํ๋์ฉ ๋นผ๋ ๊ฒ)์ฒ๋ผ ๋์ํ๋๋ฐ ์ฌ์ฉํฉ๋๋ค.
์คํ์ ๋ํด ๊ฐ์ ๊ฒ์ํด ๋ณด์ธ์.
shift() <-> unshift()
push, pop๊ณผ ๋ฐ๋๋ก ๋์ํฉ๋๋ค.
unshift(val);
๋งจ ์์ ๊ฐ์ ๋ฃ๋ ๋ฉ์๋.
๋ฐฐ์ด์ ๋งจ ์์ ์๋ก์ด ๊ฐval์ ์ถ๊ฐํฉ๋๋ค.
var b = [100]; // b๋ 100์ด๋ผ๋ ์์ ํ๋๋ฅผ ๊ฐ๋ ๋ฐฐ์ด.
b.unshift(50); // 2 (๋งจ ์์ 50์ ๋ฃ์ ๋ค b์ ์์์ ๊ฐฏ์, ์ฆ ๊ธธ์ด๋ฅผ ์๋ ค์ฃผ๋ ๊ฒ)
b; // [50, 100]
b.unshift(30); // 3
b; // [30, 50, 100]
b.unshift(10); // 4
b; // [10, 30, 50, 100]
shift();
๋งจ ์์ ๊ฐ์ ๋ฝ๋ ๋ฉ์๋.
unshift()์ ๋ฐ๋ ๊ฐ๋ .
๋ฐฐ์ด์ ๋งจ ์์ ์์๋ฅผ ๋นผ์ ๋ณ์์ ๋ฃ์ด ์ค๋๋ค.
var b = [10, 30, 50, 100];
x = b.shift(); // 10 (๋งจ ์์์ ๋ฝ์์จ ๊ฐ ์ถ๋ ฅ)
x; // 10
b; // [30, 50, 100]
'ํ๋ก๊ทธ๋๋ฐ > Javascript ์๋ฐ์คํฌ๋ฆฝํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ธํ๋ฐ] Javascript์ ๋ฌธ - ํจ์2 (ํจ์์ ๋ฆฌํด๊ฐ return) (0) | 2020.10.12 |
---|---|
[์ธํ๋ฐ] Javascript์ ๋ฌธ - ํจ์1 (0) | 2020.10.12 |
[์ธํ๋ฐ] Javascript์ ๋ฌธ - ๋ฐ๋ณต๋ฌธ2 (break, continue, ์ด์ค๋ฃจํ) (0) | 2020.10.12 |
[Javascript] '์์ ์ฐพ๊ธฐ' ๋ฌธ์ ํ์ด (0) | 2020.10.11 |
[Javascript] '๋ฌธ์์ด์ ๊ฐ์ด๋ฐ ๊ธ์ ๊ฐ์ ธ์ค๊ธฐ' ๋ฌธ์ ํ์ด (0) | 2020.10.11 |