๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ปStudy/JavaScript

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…

    1. ๊ธฐ๋ณธ ํƒ€์ž…
      1) ์ˆซ์ž (Number)
      2) ๋ฌธ์ž์—ด (String)
      3) ๋ถˆ๋ฆฐ๊ฐ’ (Boolean)
      4) undefined
      5) null

    2. ์ฐธ์กฐ ํƒ€์ž…
      1) ๊ฐ์ฒด
        (1) ๋ฐฐ์—ด (Array)
        (2) ํ•จ์ˆ˜ (Function)
        (3) ์ •๊ทœํ‘œํ˜„์‹


 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋А์Šจํ•œ ํƒ€์ž… ์ฒดํฌ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— int, char ๋“ฑ ๋ณ€์ˆ˜์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์ •ํ•˜๋Š” ์—„๊ฒฉํ•œ ํƒ€์ž… ์ฒดํฌ ์–ธ์–ด์™€๋Š” ๋‹ค๋ฅด๋‹ค. var๋ผ๋Š” ํ‚ค์›Œ๋“œ๋กœ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ , ์—ฌ๊ธฐ์— ์–ด๋–ค ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ผ๋„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ์•„๋ฌด ๊ฒƒ๋„ ๋Œ€์ž…ํ•˜์ง€ ์•Š์œผ๋ฉด undefined ํƒ€์ž…์ด๋‹ค.

 

 

1. ๊ธฐ๋ณธ ํƒ€์ž…

 1) ์ˆซ์ž (Number)

   - ๋ชจ๋“  ์ˆซ์ž๋ฅผ 64๋น„ํŠธ ๋ถ€๋™ ์†Œ์ˆ˜์  ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ณ , ์ด๋Š” C์–ธ์–ด์˜ double ํƒ€์ž…๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

 2) ๋ฌธ์ž์—ด (String) 

   - ์ž‘์€ ๋”ฐ์˜ดํ‘œ ๋˜๋Š” ํฐ ๋”ฐ์˜ดํ‘œ๋กœ ์ƒ์„ฑํ•œ๋‹ค. ๋ฌธ์ž์—ด์€ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. char ํƒ€์ž…๊ณผ ๊ฐ™์€ ๋ฌธ์ž       ํƒ€์ž…์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ํ•œ ๋ฒˆ ์ •์˜๋œ ๋ฌธ์ž์—ด์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ์ˆ˜์ •์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

 

var str = 'uno';
str[0] = 'U';
console.log(str); //uno ์ถœ๋ ฅ
//์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•ด ๊ฐ’์„ ๋ฐ”๊พธ๋ คํ•ด๋„ ๋ฐ”๋€Œ์ง€ ์•Š๋Š”๋‹ค.

 

 3) ๋ถˆ๋ฆฐ๊ฐ’ (Boolean)

   - true ๋˜๋Š” false

 4) undefined

   - '๊ฐ’์ด ๋น„์–ด์žˆ์Œ'์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. undefined๋Š” ํƒ€์ž…์ด์ž ๊ฐ’์ด๋‹ค.

 

var emptyVar;
console.log(typeof emptyVar); //undefined ์ถœ๋ ฅ
console.log(emptyVar); //undefined ์ถœ๋ ฅ
//์„ ์–ธํ•˜๊ณ  ๊ฐ’์„ ๋Œ€์ž…ํ•˜์ง€ ์•Š์œผ๋ฉด ๊ฐ’๊ณผ ํƒ€์ž… ๋ชจ๋‘ undefined์ด๋‹ค.

 

 5) null

   - '๊ฐ’์ด ๋น„์–ด์žˆ์Œ'์„ ๋‚˜ํƒ€๋‚ด์ง€๋งŒ, ํƒ€์ž…์€ Object์ด๊ณ  ๊ฐ’์€ null์ด๋‹ค. (undefined์™€์˜ ์ฐจ์ด์ )

 

var nullVar = null;
console.log(typeof nullVar === null); //false ์ถœ๋ ฅ. null๊ฐ’์„ ๋‹ด์€ ๋ณ€์ˆ˜์˜ ํƒ€์ž…์€ Object์ด๋‹ค.
console.log(nullVar === null);  //true ์ถœ๋ ฅ

 

 

2. ์ฐธ์กฐ ํƒ€์ž…

 1) ๊ฐ์ฒด (Object)

   - 'key : value' ํ˜•ํƒœ์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์ปจํ…Œ์ด๋„ˆ์ด๋‹ค. ์•ž์„œ ๋งํ•œ ๊ธฐ๋ณธ ํƒ€์ž…์„ ์ œ์™ธํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ฐ’์€         ๊ฐ์ฒด์ด๋‹ค. ๊ฐ์ฒด๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐ์ฒด์˜ ์ข…๋ฅ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

 

  (1) ๋ฐฐ์—ด (Array)

  (2) ํ•จ์ˆ˜ (Function)

  (3) ์ •๊ทœํ‘œํ˜„์‹

 

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๊ฐ์ฒด, ์ฐธ์กฐ ํƒ€์ž…์˜ ์„ฑ์งˆ์„ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๊ณ  ์ดํ›„์— ๋ฐฐ์—ด๊ณผ ํ•จ์ˆ˜ ๋“ฑ์„ ์ž์„ธํžˆ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

 

/*** ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ๋ฒ• ***/

//1. Object() ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์ด์šฉ
var nee = new Object(); //๋นˆ ๊ฐ์ฒด ์ƒ์„ฑ
nee.name = 'uno'; //๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ์ƒ์„ฑ (name : ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„ / uno : ํ”„๋กœํผํ‹ฐ ๊ฐ’)
nee.age = 100;

//2. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹ ์ด์šฉ
var nee = {
    name: 'uno',
    age: 100
};

//3. ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์ด์šฉ


/*** ๊ฐ์ฒด์˜ ์ถœ๋ ฅ ***/
console.log(typeof nee); //object
console.log(nee); { name: 'uno', age:100 }

 

 

* ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ์ฝ๋Š” ๋ฒ•

 

- ๋Œ€๊ด„ํ˜ธ([]) ํ‘œ๊ธฐ๋ฒ• => nee['name']

   ์ ‘๊ทผํ•˜๋ ค๋Š” ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„์ด ํ‘œํ˜„์‹์ด๊ฑฐ๋‚˜ ์˜ˆ์•ฝ์–ด์ผ ๊ฒฝ์šฐ์—๋Š” ์ด ๋ฐฉ๋ฒ•๋งŒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

   ex) nee๋ผ๋Š” ๊ฐ์ฒด์— full-name ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ nee.full-name์€ ๋ถˆ๊ฐ€๋Šฅ, nee['full-name']์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

- ๋งˆ์นจํ‘œ(.) ํ‘œ๊ธฐ๋ฒ• => nee.name

 

โ€ป ํ”„๋กœํผํ‹ฐ ์ด๋ฆ„์ด ์ˆซ์ž์ผ ๊ฒฝ์šฐ, ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ์ˆซ์ž๋งŒ ์ ์–ด๋„ ๋œ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด [] ์—ฐ์‚ฐ์ž ๋‚ด์˜ ์ˆซ์ž๋ฅผ ์ž๋™์œผ๋กœ ๋ฌธ์ž์—ด ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, var n = { 10: 'hello' } ์ผ ๋•Œ

n['10'] ๋˜๋Š” n[10] ๋‘˜ ๋‹ค ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

* ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ํ• ๋‹น/๊ฐฑ์‹ ํ•˜๋Š” ๋ฒ•

 

nee.major = 'engineering';

[nee๋ผ๋Š” ๊ฐ์ฒด์— major๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ] => engineering์ด๋ผ๋Š” ๊ฐ’์œผ๋กœ major ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋™์  ์ƒ์„ฑ๋œ๋‹ค.

[                     major๋ผ๋Š” ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ด๋ฏธ ์žˆ๋Š” ๊ฒฝ์šฐ] => major ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์ด engineering์œผ๋กœ ๊ฐฑ์‹ ๋œ๋‹ค.

 

--> ์ฆ‰, ๊ฐ์ฒด์— ๊ฐ’์„ ํ• ๋‹นํ•  ๋•Œ, ํ”„๋กœํผํ‹ฐ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ํ•ด๋‹น ํ”„๋กœํผํ‹ฐ์˜ ๊ฐ’์„ ๊ฐฑ์‹ ํ•˜๊ณ , ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ์ƒˆ๋กœ์šด ํ”„๋กœํผํ‹ฐ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋ฉด์„œ ๊ฐ’์„ ํ• ๋‹นํ•œ๋‹ค.

 

 

 

* for in ๋ฌธ์œผ๋กœ ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ์ถœ๋ ฅํ•˜๊ธฐ (์ž๋ฐ”์˜ for each๋ฌธ๊ณผ ๋น„์Šท)

 

var nee = {
    name: 'uno',
    age: 100
};

var prop;

for(prop in nee){
    console.log(prop, nee[prop];
}
//[์ถœ๋ ฅ๊ฐ’]
//name uno
//age 100

 

 

* ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ ์‚ญ์ œ

delete ์—ฐ์‚ฐ์ž๋กœ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ์œผ๋‚˜, ๊ฐ์ฒด๋ฅผ ์‚ญ์ œํ•  ์ˆ˜๋Š” ์—†๋‹ค.

 

delete nee.name; //name ํ”„๋กœํผํ‹ฐ ์‚ญ์ œ
delete nee; //์—๋Ÿฌ๋Š” ๋‚˜์ง€ ์•Š์œผ๋‚˜ ๊ฐ์ฒด๋Š” ์‚ญ์ œ๋˜์ง€ ์•Š์Œ

 

 

 

 

* ์ฐธ์กฐ ํƒ€์ž…์˜ ํŠน์„ฑ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ž๋ฃŒํ˜• ์ค‘์—์„œ ๊ฐ์ฒด๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด๋ฉฐ, ๊ฐ์ฒด์˜ ๋ชจ๋“  ์—ฐ์‚ฐ์€ ์‹ค์ œ ๊ฐ’์ด ์•„๋‹Œ ์ฐธ์กฐ๊ฐ’์œผ๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.

//objA ๊ฐ์ฒด ์ƒ์„ฑ
var objA = {
    val: 40
};

//objB ๊ฐ์ฒด์— objA์˜ ๊ฐ’์„ ๋Œ€์ž…ํ•˜๋ฉฐ ์ƒ์„ฑ
var objB = objA;

console.log(objA); //{ val: 40 } ์ถœ๋ ฅ
console.log(objB); //{ val: 40 } ์ถœ๋ ฅ

objA.val = 50; //objA์˜ val ๊ฐ’์„ 50์œผ๋กœ ๊ฐฑ์‹ 

console.log(objA); //{ val: 50 } ์ถœ๋ ฅ
console.log(objB); //{ val: 50 } ์ถœ๋ ฅ

 

๊ฐ์ฒด๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด๊ธฐ ๋•Œ๋ฌธ์— objB์˜ val ๊ฐ’ ์—ญ์‹œ 50์œผ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค. objA ๋ณ€์ˆ˜๋Š” ๊ฐ์ฒด ์ž์ฒด๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฐธ์กฐ๊ฐ’(์ฃผ์†Œ๊ฐ’)์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค. => objA์™€ objB๋Š” ๋™์ผํ•œ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค.

 

 

 

- ๊ฐ์ฒด์˜ ๋น„๊ต

 

var objA = {
    val: 40
};

var objB = {
    val: 40
};

var objC = objA;


console.log(objA == objB); //false
console.log(objA == objC); //true

 

objA์™€ objB๋Š” ๋‹ค๋ฅธ ๊ฐ์ฒด์ด์ง€๋งŒ ๊ฐ™์€ ํ˜•ํƒœ์˜ ํ”„๋กœํผํ‹ฐ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ์ฒด๋Š” ์ฐธ์กฐ ํƒ€์ž…์ด๊ณ  ๋‘˜์˜ ์ฐธ์กฐ๊ฐ’์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— false๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. objC๋Š” objA์™€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋ฏ€๋กœ true๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

 

 

 

- ์ฐธ์กฐ์— ์˜ํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹

 

์ธ์ž๋กœ ๊ธฐ๋ณธ ํƒ€์ž…์„ ๋„˜๊ธด ๊ฒฝ์šฐ => ๊ฐ’์— ์˜ํ•œ ํ˜ธ์ถœ ๋ฐฉ์‹(Call By Value)

ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ณต์‚ฌ๋œ ๊ฐ’์ด ์ „๋‹ฌ๋˜๊ณ , ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด๋„ ์‹ค์ œ ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š”๋‹ค.

 

์ธ์ž๋กœ ์ฐธ์กฐ ํƒ€์ž…์„ ๋„˜๊ธด ๊ฒฝ์šฐ => ์ฐธ์กฐ์— ์˜ํ•œ ํ˜ธ์ถœ ๋ฐฉ์‹(Call By Reference)

ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ฐ์ฒด์˜ ์ฐธ์กฐ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ๋˜๊ณ , ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

var a = 100;
var objA = {
    val:100
};

function change(num, obj){
	num = 200;
	obj.val = 200;
	console.log(num); // 200
	console.log(obj); // { val : 200 }
};

change(a, objA); //a : ๊ธฐ๋ณธ ํƒ€์ž…, objA : ์ฐธ์กฐ ํƒ€์ž…

console.log(a); // 100
console.log(objA); // { val : 200 }

 

์ฐธ์กฐ ํƒ€์ž…์ธ objA์˜ ๊ฒฝ์šฐ ํ•จ์ˆ˜ ๋‚ด์—์„œ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ, ํ•จ์ˆ˜๊ฐ€ ๋๋‚œ ํ›„ objA์˜ ๊ฐ’์€ { val : 200 } ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.