🐸 [JavaScript] νƒ€μž… λ³€ν™˜ & 단좕 평가

hnyoojinΒ·2024λ…„ 8μ›” 30일

🐸 JS λ§ˆμŠ€ν„° 되기

λͺ©λ‘ 보기
8/19
post-thumbnail

μ•žμ„œ μ•”μ‹œμ  νƒ€μž… λ³€ν™˜μ— λŒ€ν•œ 언급이 많이 μžˆμ—ˆλ‹€.

이번 κΈ€μ—μ„œλŠ” νƒ€μž… λ³€ν™˜, 그리고 단좕 ν‰κ°€λž€ 무엇인 지에 λŒ€ν•΄ 정리해 λ³΄μ•˜λ‹€.



νƒ€μž… λ³€ν™˜?

값을 μ‚¬μš©ν•˜λ‹€ 보면, νƒ€μž…μ„ λ³€ν™˜ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ μžˆλ‹€.

λ¬Έμžμ—΄κ³Ό 숫자의 λ§μ…ˆμ΄ 이루어져야 ν•˜κ±°λ‚˜, boolean νƒ€μž…μ΄ μ•„λ‹Œ 값을 논리 κ°’μœΌλ‘œ 평가해야 ν•˜λŠ” κ²½μš°κ°€ 이에 ν•΄λ‹Ήν•œλ‹€.


이럴 경우, λͺ…μ‹œμ  λ˜λŠ” 암묡적 νƒ€μž… λ³€ν™˜μ„ μˆ˜ν–‰ν•˜κ²Œ λœλ‹€.

νƒ€μž… λ³€ν™˜μ΄λΌλŠ” 것이, κΈ°μ‘΄ 값을 μ‹€μ œλ‘œ λ³€κ²½ν•˜λŠ” 것을 μ˜λ―Έν•˜μ§€λŠ” μ•ŠμŒμ„ κΈ°μ–΅ν•˜μž.

κ·Έμ € λ‹€λ₯Έ νƒ€μž…μ˜ μƒˆλ‘œμš΄ 값을 생성할 뿐이닀.

λͺ…μ‹œμ  νƒ€μž… λ³€ν™˜ explicit coercion 은, κ°œλ°œμžκ°€ μ˜λ„μ μœΌλ‘œ κ°’μ˜ νƒ€μž…μ„ λ³€ν™˜ν•˜λŠ” 것을 λ§ν•œλ‹€.

암묡적 νƒ€μž… λ³€ν™˜ implicit coercion 은, 개발자의 μ˜λ„μ™€λŠ” 상관 없이 μˆ˜ν–‰λ˜λŠ” νƒ€μž… λ³€ν™˜μ„ λ§ν•œλ‹€.


λ¬΅μ‹œμ  νƒ€μž… λ³€ν™˜μ„ μˆ˜ν–‰ν•˜λŠ” JavaScript 엔진은, νƒ€μž… λ³€ν™˜μœΌλ‘œ λ§Œλ“€μ–΄ λ‚Έ μƒˆλ‘œμš΄ 값을 연산에 ν•œ 번 μ‚¬μš©ν•œ λ’€, 값을 버린닀.

이런 암묡적 νƒ€μž… λ³€ν™˜ 과정은, μ½”λ“œμ—μ„œ 확인할 μˆ˜κ°€ μ—†λ‹€.

λ™λ£Œκ°€ μ½”λ“œλ₯Ό 보고 νƒ€μž… λ³€ν™˜μ„ μ˜ˆμΈ‘ν•  수 μžˆλ„λ‘, νƒ€μž… λ³€ν™˜μ„ μ •ν™•νžˆ μ΄ν•΄ν•œ 후에 μ‚¬μš©ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€.

이제 방법에 λŒ€ν•΄ μžμ„Ένžˆ μ‚΄νŽ΄λ³΄μž!



λͺ…μ‹œμ  νƒ€μž… λ³€ν™˜

String νƒ€μž…μœΌλ‘œ

μ–΄λ–€ 값을 String νƒ€μž…μœΌλ‘œ λ³€ν™˜μ‹œν‚€λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄μž

  • String( κ°’ );
    String μƒμ„±μž ν•¨μˆ˜λ₯Ό new μ—°μ‚°μž 없이 ν˜ΈμΆœν•˜λŠ” 방법

  • ( κ°’ ).toString();
    Object.prototype.toString λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 방법

  • κ°’ + '';
    λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μž + λ₯Ό μ‚¬μš©ν•˜λŠ” 방법



Number νƒ€μž…μœΌλ‘œ

μ–΄λ–€ 값을 Number νƒ€μž…μœΌλ‘œ λ³€ν™˜μ‹œν‚€λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄μž

  • Number( κ°’ );
    Number μƒμ„±μž ν•¨μˆ˜λ₯Ό new μ—°μ‚°μž 없이 ν˜ΈμΆœν•˜λŠ” 방법

  • parseInt( λ¬Έμžμ—΄ ); or parseFloat( λ¬Έμžμ—΄ );
    parseInt, parseFloat ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 방법 (λ¬Έμžμ—΄λ§Œ λ³€ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€.)

  • + κ°’;
    단항 μ‚°μˆ  μ—°μ‚°μž + λ₯Ό μ‚¬μš©ν•˜λŠ” 방법

  • κ°’ * 1;
    μ‚°μˆ  μ—°μ‚°μž * λ₯Ό μ‚¬μš©ν•˜λŠ” 방법

  • 빈 λ¬Έμžμ—΄ '', 빈 λ°°μ—΄ [], null, falseλŠ” 0으둜 λ³€ν™˜λ¨
  • 객체, 빈 배열이 μ•„λ‹Œ λ°°μ—΄, undefinedλŠ” λ³€ν™˜λ˜μ§€ μ•Šκ³  NaN이 됨


boolean νƒ€μž…μœΌλ‘œ

μ–΄λ–€ 값을 boolean νƒ€μž…μœΌλ‘œ λ³€ν™˜μ‹œν‚€λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄μž

  • Boolean( κ°’ );
    Boolean μƒμ„±μž ν•¨μˆ˜λ₯Ό new μ—°μ‚°μž 없이 ν˜ΈμΆœν•˜λŠ” 방법

  • !!κ°’;
    λΆ€μ • 논리 μ—°μ‚°μžλ₯Ό 두 번 μ‚¬μš©ν•˜λŠ” 방법
    μ—…λ‘œλ“œμ€‘..

JavaScript 엔진은, boolean νƒ€μž…μ΄ μ•„λ‹Œ 값을 Truthy κ°’κ³Ό Falsy κ°’μœΌλ‘œ κ΅¬λΆ„ν•˜λ©°,
TruthyλŠ” true, FalsyλŠ” false둜 암묡적 νƒ€μž… λ³€ν™˜λœλ‹€.

  • false, undefined, null, 0, -0, NaN, ''λŠ” Falsy κ°’.
  • κ·Έ μ™Έμ˜ 값은 λͺ¨λ‘ Truthy κ°’.


암묡적 νƒ€μž… λ³€ν™˜

String νƒ€μž…μœΌλ‘œ

JavaScript 엔진은, ( κ°’ ) + ''; 방법을 μ‚¬μš©ν•΄ 값을 String νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•œλ‹€.


Number νƒ€μž…μœΌλ‘œ

JavaScript 엔진은, + κ°’; 방법을 μ‚¬μš©ν•΄ 값을 Number νƒ€μž…μœΌλ‘œ λ³€ν™˜ν•œλ‹€.


단좕 평가?

단좕 ν‰κ°€λž€, ν‘œν˜„μ‹ 평가 도쀑 κ²°κ³Όκ°€ 확정이 λ‚œ 경우, λ‚˜λ¨Έμ§€ 평가 과정을 μƒλž΅ν•˜λŠ” 평가 방식을 λ§ν•˜λŠ” 것이닀.

논리 μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•œ 단좕평가

논리 μ—°μ‚°μ˜ ν”Όμ—°μ‚°μž 쀑, κ²°κ³Όλ₯Ό κ²°μ •ν•˜λŠ” ν”Όμ—°μ‚°μžκ°€ μƒκΈ°κ²Œ λœλ‹€.

이λ₯Ό νƒ€μž… λ³€ν™˜ ν•˜μ§€ μ•Šμ€ ν”Όμ—°μ‚°μž κ·ΈλŒ€λ‘œλ₯Ό λ°˜ν™˜ν•œλ‹€λŠ” νŠΉμ§•μ΄ μžˆλ‹€.

'Cat' && 'Dog' λΌλŠ” ν‘œν˜„μ‹μ΄ μžˆλ‹€.

'Cat'λŠ” Truthy 값이고, true둜 ν‰κ°€λœλ‹€.

λ”°λΌμ„œ ν•΄λ‹Ή ν‘œν˜„μ‹μ€ 'Dog'에 μ˜ν•΄ κ²°κ³Όκ°€ 결정될 것이닀.

μ΄λ•Œ, trueλ₯Ό λ°˜ν™˜ν•˜λŠ” 것이 μ•„λ‹Œ 'Dog'λ₯Ό λ°˜ν™˜ν•˜λŠ” 것이 λ°”λ‘œ 단좕 평가이닀.



optional chaining μ—°μ‚°μž ?!

ES11μ—μ„œ λ„μž…λ˜μ—ˆλ‹€.

μ’Œν•­μ˜ ν”Όμ—°μ‚°μžκ°€ null/undefined이면 undefinedλ₯Ό λ°˜ν™˜ν•˜κ³ ,
κ·Έλ ‡μ§€ μ•Šλ‹€λ©΄ μš°ν•­μ˜ ν”„λ‘œνΌν‹° μ°Έμ‘°λ₯Ό 이어 λ‚˜κ°€κ²Œ ν•˜λŠ” μ—°μ‚°μžμ΄λ‹€.

let elem = null;

let value = elem?.value;
console.log(value);
// undefined


null 병합 μ—°μ‚°μž ??

ES11μ—μ„œ λ„μž…λ˜μ—ˆλ‹€.

μ’Œν•­μ˜ ν”Όμ—°μ‚°μžκ°€ null/undefined이면 μš°ν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό,
μ•„λ‹ˆλΌλ©΄ μ’Œν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό λ°˜ν™˜ν•˜λŠ” μ—°μ‚°μžμ΄λ‹€.

λ³€μˆ˜μ˜ κΈ°λ³Έκ°’ 섀정에 μœ μš©ν•˜λ‹€.

let foo = null ??? 'default string';
console.log(foo)

// "default string"




λ‚΄κ°€ κΈ°λŒ€ν•œ 게 λ­”μ§€ λͺ¨λ₯΄κ² μ§€λ§Œ, κΈ°λŒ€ν–ˆλ˜ λ‚΄μš©κ³ΌλŠ” λ‹€λ₯΄κ²Œ,,, κ·Έλƒ₯ κ°„λ‹¨ν•œ λ°©λ²•λ§Œ μ™•μ°½ λ‹€λ£¨λŠ” 것 κ°™μ•„ 쑰금 아쉬웠닀.

λ‹€μŒ μž₯은 객체 λ¦¬ν„°λŸ΄μ΄λ‹€.

객체가 JavaScriptμ—μ„œ ꡉμž₯히 μ€‘μš”ν•œ κ°œλ…μ΄λΌκ³  ν•˜λ˜λ°, 잘 μ΄ν•΄ν•˜κ³  정리해보고 μ‹Άλ‹€!

0개의 λŒ“κΈ€