Lecture/μ½”λ“œμŠ€ν…Œμ΄μΈ 

[SEB FE] section 1 unit 10 (1) μ›μ‹œμžλ£Œν˜•κ³Ό μ°Έμ‘°μžλ£Œν˜• + μ’…ν•©ν€΄μ¦ˆ

Dong _ hwa 2022. 9. 6. 15:31

 

 

μ›μ‹œμžλ£Œν˜•

"hello world!"
"hello codestates!"
// "hello world!" 와 "hello codestates!"λŠ” λͺ¨λ‘ λ³€κ²½ν•  수 μ—†λŠ” κ³ μ •λœ κ°’μž…λ‹ˆλ‹€.

let word = "hello world!"
word = "hello codestates!"
// ν•˜μ§€λ§Œ, wordλΌλŠ” λ³€μˆ˜μ— μž¬ν• λ‹Ήμ„ ν•˜μ—¬ λ³€μˆ˜μ— λ‹΄κΈ΄ λ‚΄μš©μ„ λ³€κ²½ν•˜λŠ” 것은 κ°€λŠ₯ν•©λ‹ˆλ‹€.

const num1 = 123;
num1 = 123456789; // μ—λŸ¬ λ°œμƒ
// const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•˜λ©΄, μž¬ν• λ‹Ήμ€ λΆˆκ°€ν•©λ‹ˆλ‹€.
  • λ³€μˆ˜μ—λŠ” ν•˜λ‚˜μ˜ λ°μ΄ν„°λ§Œ λ‹΄λŠ”λ‹€
  • string, number, bigint, boolean, undefined, symbol, (null)
let a = 1;
a = b;
b = 2;
a; // ==> 2

 

 

μ°Έμ‘°μžλ£Œν˜•

  • 크기가 λ™μ μœΌλ‘œ λ³€ν•˜λŠ” 데이터 보관함
  • μ›μ‹œμžλ£Œν˜•μ΄ 할당될 λ•Œμ—λŠ” λ³€μˆ˜μ— κ°’(value)μžμ²΄κ°€ λ‹΄κΈ°κ³ , μ°Έμ‘° μžλ£Œν˜•μ΄ 할당될 λ•Œμ—λŠ” λ³΄κ΄€ν•¨μ˜ μ£Όμ†Œ(reference)κ°€ λ‹΄κΉ€.
  • κ·Έλž˜μ„œ μ°Έμ‘°μžλ£Œν˜•μ€ κ³ μ •λœ 크기의 보관함이 μ•„λ‹ˆλΌ λ™μ μœΌλ‘œ 크기가 λ³€ν•˜λŠ” νŠΉλ³„ν•œ 보관함 μ‚¬μš©
  • array, object, function
let e = [10, 20];
lef f = e;
f[0] = 50;
e; // ==> [50, 20]

 

 

 

 

μ’…ν•©ν€΄μ¦ˆ

3. λ‹€μŒ μ½”λ“œκ°€ μ‹€ν–‰λœ ν›„, μ½˜μ†”μ— μ°νžˆλŠ” 값은 각각 무엇인지 κ³ λ₯΄μ„Έμš”.

console.log('codestates' === 'codestates');
console.log(3.14 === 3.14);
console.log([1,2,3] === [1,2,3]);
console.log({ foo: 'bar' } === { foo: 'bar' });

λ‹΅ : true true false false

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” 머리λ₯Ό μ”λ‹ˆλ‹€. 그러면 λ©”λͺ¨λ¦¬μ— 곡간은 λ‚΄κ°€ μ•Œμ•„μ„œ λΆ€μ—¬ν•˜κ³ , λ³€μˆ˜λŠ” κ·Έ κ³΅κ°„μ˜ μ£Όμ†Œλ§Œ μ°Έμ‘°ν•˜λ„λ‘ ν•˜μž! κ·Έλž˜μ„œ μ°Έμ‘° μžλ£Œν˜•μ΄ νƒ„μƒν•˜κ²Œ λ©λ‹ˆλ‹€.

 

κ°’μ˜ 크기가 μˆ˜μ‹œλ‘œ λ³€ν•˜λŠ” 것을 μ²˜λ¦¬ν•˜κΈ° μœ„ν•΄μ„œ μ°Έμ‘°μžλ£Œν˜•μ€ heapμ΄λΌλŠ” λ³„λ„μ˜ λ©”λͺ¨λ¦¬ μ €μž₯곡간 μ‚¬μš©

μ°Έμ‘° μžλ£Œν˜•μ˜ ===(strict equality)λŠ” μ£Όμ†Œκ°’μ΄ 같은지λ₯Ό 확인

console.log([1,2,3] === [1,2,3]);

이 μ½”λ“œλ₯Ό μ½μœΌλ©΄μ„œ μ»΄ν“¨ν„°λŠ” 이미 λ‘κ°œμ˜ heap μ €μž₯ κ³΅κ°„μ˜ μ£Όμ†Œ 확보

미리 μ£Όμ†Œκ°’κ³Ό λ©”λͺ¨λ¦¬ 값을 μž‘μ•„λ‘”λ‹€ --> [] === [] 도 true κ°€ λ‚˜μ˜€μ§€ μ•ŠμŒ

 

 

 

 

4. λ‹€μŒ μ½”λ“œκ°€ μ‹€ν–‰λœ ν›„, x.foo의 값은 무엇인지 κ³ λ₯΄μ„Έμš”.

let x = { foo: 3 };
let y = x;
y = 2;

λ‹΅ : 3

let x = { foo: 3 };
let y = x;				// μ—¬κΈ°μ„œ yλŠ” x의 μ£Όμ†Œκ°’ ν• λ‹Ή
y = 2;					// ν•˜μ§€λ§Œ λ‹€μ‹œ 2λ₯Ό ν• λ‹Ή

이 κ³Όμ •μ—μ„œ μ°Έμ‘° μžλ£Œν˜• {foo : 3}μ—λŠ” μ•„λ¬΄λŸ° 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ—

x.fooλŠ” κ·ΈλŒ€λ‘œ 3

 

 

 

 

5. λ‹€μŒ μ½”λ“œκ°€ μ‹€ν–‰λœ ν›„, myArray의 값은 무엇인지 κ³ λ₯΄μ„Έμš”.

let myArray = [2, 3, 4, 5];
let ourArray = myArray;
ourArray[2] = 25;
ourArray = undefined;

λ‹΅ : [2, 3, 25, 5]

  • λ³€μˆ˜ ourArray에 myArray의 μ£Όμ†Œκ°’μ΄ ν• λ‹Ή
  • ourArray μ£Όμ†Œκ°’μ— μœ„μΉ˜ν•œ λ°°μ—΄μ˜ 2번째 μš”μ†Œλ₯Ό 25둜 λ³€κ²½
    (ourArray와 myArray의 μ£Όμ†Œκ°’μ€ κ°™μŒμœΌλ‘œ ν˜„μž¬ myArrayλŠ” [2, 3, 25, 5])
  • λ³€μˆ˜ ourArray에 μ›μ‹œ μžλ£Œν˜• undefinedκ°€ ν• λ‹Ήλ˜μ—ˆκΈ° λ•Œλ¬Έμ—, myArray에 μ ‘κ·Όx
    (ν•˜μ§€λ§Œ myArrayλŠ” κ·ΈλŒ€λ‘œ [2, 3, 25, 5])

 

 

 

 

6. λ‹€μŒ μ½”λ“œκ°€ μ‹€ν–‰λœ ν›„, player.score의 값은 무엇인지 κ³ λ₯΄μ„Έμš”.

let player = { score: 3 };
function doStuff(obj) { 
  obj.score = 2;
}

doStuff(player);

λ‹΅ : 2

doStuff(player);
  • ν•¨μˆ˜ doStuff에 λ³€μˆ˜ playerλ₯Ό 인자둜 μ „λ‹¬ν•˜μ—¬ 호좜
function doStuff(obj) { 
  obj.score = 2;
}
  • ν•¨μˆ˜κ°€ 호좜되면 (μ‹€ν–‰λ˜λ©΄) λ§€κ°œλ³€μˆ˜ obj에 λ³€μˆ˜ player의 값이 ν• λ‹Ή - { score: 3 }의 μ£Όμ†Œκ°’
  • obj.score에 2λ₯Ό ν• λ‹Ήν•˜λ©΄, obj와 playerλŠ” 같은 μ£Όμ†Œκ°’μ„ κ°€μ§€κ³  있기 λ•Œλ¬Έμ—, player.score도 2

 

 

 

 

 

 

7. λ‹€μŒ μ½”λ“œκ°€ μ‹€ν–‰λœ ν›„, score 의 값은 무엇인지 κ³ λ₯΄μ„Έμš”.

let score = 80;
function doStuff(value) {
  value = 90;
}

doStuff(score)

λ‹΅ : 80

doStuff(score)

ν•¨μˆ˜ doStuff에 score의 값을 인자둜 μ „λ‹¬ν•˜μ—¬ μ‹€ν–‰

function doStuff(value) {
  value = 90;
}
  • λ§€κ°œλ³€μˆ˜ value에 score의 κ°’ 80이 μ „λ‹¬λ˜κ³ , value = 90μ—μ„œ value에 90이 ν• λ‹Ή
  • λ‹€λ§Œ λ³€μˆ˜ score의 κ°’ 80은, μ°Έμ‘° μžλ£Œν˜•μ΄ μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μ£Όμ†Œκ°’μ„ μ „λ‹¬ν•˜μ§€ μ•Šκ³ , κ°’ 자체λ₯Ό λ³΅μ‚¬ν•˜μ—¬ 전달
  • λ”°λΌμ„œ ν•¨μˆ˜μ—μ„œ μ–΄λ–€ 일이 λ°œμƒν–ˆλ˜κ°€μ™€ 관련이 없이 scoreλŠ” μ΄ˆκΈ°μ— ν• λ‹Ήλœ κ°’ 80이 κ·ΈλŒ€λ‘œ μœ μ§€