λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
javascript/πŸ“– study

[μŠ€ν„°λ”” 1μ£Όμ°¨]9μž₯ νƒ€μž…λ³€ν™” 와 단좕 평가

by HomieKim 2022. 2. 4.

νƒ€μž… λ³€ν™˜κ³Ό 단좕 평가

  • κ°œλ°œμžκ°€ μ˜λ„μ μœΌλ‘œ κ°’μ˜ νƒ€μž…μ„ λ³€ν™˜ν•˜λŠ” 것을 λͺ…μ‹œμ  νƒ€μž… λ³€ν™˜ λ˜λŠ” νƒ€μž… μΊμŠ€νŒ… * 이라고 ν•©λ‹ˆλ‹€
  • 개발자의 μ˜λ„μ™€ 상관없이 ν‘œν˜„μ‹μ„ ν‰κ°€ν•˜λŠ” 도쀑에 μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ μžλ™μœΌλ‘œ λ³€ν™˜ λ˜λŠ” 것을 암묡적 νƒ€μž… λ³€ν™˜ λ˜λŠ” νƒ€μž… κ°•μ œ λ³€ν™˜ 이라 ν•©λ‹ˆλ‹€.

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

  • 암묡적 νƒ€μž…λ³€ν™˜μ΄ λ°œμƒν•˜λ©΄ λ¬Έμžμ—΄, 숫자, λΆˆλ¦¬μ–Έ 같은 μ›μ‹œνƒ€μž… 쀑 ν•˜λ‚˜λ‘œ νƒ€μž…μ„ μžλ™ λ³€ν™˜ν•œλ‹€.

    λ¬Έμžμ—΄νƒ€μž…μœΌλ‘œ λ³€ν™˜

  • +μ—°μ‚°μžλŠ” λ¬Έμžμ—΄μ„ λ§Œλ‚˜λ©΄ λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μžλ‘œ λ™μž‘ν•˜μ—¬ μ•”λ¬΅μ μœΌλ‘œ λ¬Έμžμ—΄λ‘œ νƒ€μž…μ„ λ³€ν™˜ν•¨
// 숫자 νƒ€μž…
0 + ''         // -> "0"
-0 + ''        // -> "0"
1 + ''         // -> "1"
-1 + ''        // -> "-1"
NaN + ''       // -> "NaN"
Infinity + ''  // -> "Infinity"
-Infinity + '' // -> "-Infinity"

// λΆˆλ¦¬μ–Έ νƒ€μž…
true + ''  // -> "true"
false + '' // -> "false"

// null νƒ€μž…
null + '' // -> "null"

// undefined νƒ€μž…
undefined + '' // -> "undefined"

// μ‹¬λ²Œ νƒ€μž…
(Symbol()) + '' // -> TypeError: Cannot convert a Symbol value to a string

// 객체 νƒ€μž…
({}) + ''           // -> "[object Object]"
Math + ''           // -> "[object Math]"
[] + ''             // -> ""
[10, 20] + ''       // -> "10,20"
(function(){}) + '' // -> "function(){}"
Array + ''          // -> "function Array() { [native code] }"

숫자 νƒ€μž…μœΌλ‘œ λ³€ν™˜

  • μ‚°μˆ μ—°μ‚°μžμ˜ 경우 ν”Όμ—°μ‚°μžλ₯Ό μˆ«μžνƒ€μž…μœΌλ‘œ λ³€ν™˜
    '12' + 3 // κ²°κ³Ό : '123' λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μžλ‘œ λ™μž‘ 3을 λ¬Έμžμ—΄λ‘œ λ³€ν™˜
    '12' - 3 // κ²°κ³Ό : 9 μ‚°μˆ  μ—°μ‚°μžλ‘œ λ™μž‘ 12λ₯Ό μˆ«μžνƒ€μž…μœΌλ‘œ λ³€ν™˜
  • λΉ„κ΅μ—°μ‚°μž λŠ” 숫자 νƒ€μž…μ΄ μ•„λ‹Œ 것을 μˆ«μžνƒ€μž…μœΌλ‘œ λ³€ν™˜
  • μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 +단항 μ—°μ‚°μžλ₯Ό 톡해 νƒ€μž… λ³€ν™˜ μ‹€ν–‰
// λ¬Έμžμ—΄ νƒ€μž…
+''       // -> 0
+'0'      // -> 0
+'1'      // -> 1
+'string' // -> NaN

// λΆˆλ¦¬μ–Έ νƒ€μž…
+true     // -> 1
+false    // -> 0

// null νƒ€μž…
+null     // -> 0

// undefined νƒ€μž…
+undefined // -> NaN

// μ‹¬λ²Œ νƒ€μž…
+Symbol() // -> ypeError: Cannot convert a Symbol value to a number

// 객체 νƒ€μž…
+{}             // -> NaN
+[]             // -> 0
+[10, 20]       // -> NaN
+(function(){}) // -> NaN

λΆˆλ¦¬μ–Έ νƒ€μž… λ³€ν™˜

  • jsμ—μ„œ false둜 λ°˜ν™˜ λ˜λŠ” 것듀
    • false
    • undefined
    • null
    • 0, -0
    • NaN
    • ''(빈 λ¬Έμžμ—΄)
  • λ‚˜λ¨Έμ§€λŠ” μ „λΆ€ true둜 μ·¨κΈ‰ (빈 λ¬Έμžμ—΄ μ•„λ‹Œ λ¬Έμžμ—΄, 빈 λ°°μ—΄[], 빈 객체{})

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

λ¬Έμžμ—΄ νƒ€μž… λ³€ν™˜

  1. String μƒμ„±μž ν•¨μˆ˜ new ν‚€μ›Œλ“œ 없이 μ‚¬μš©
  2. toString λ©”μ„œλ“œ μ‚¬μš©
  3. λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μž μ‚¬μš©

숫자 νƒ€μž…μœΌλ‘œ λ³€ν™˜

  1. Number μƒμ„±μž ν•¨μˆ˜λ₯Ό new ν‚€μ›Œλ“œ 없이 호좜
  2. parseInt, parseFloatν•¨μˆ˜ μ‚¬μš©
  3. + 단항 μ‚°μˆ  μ—°μ‚°μžλ₯Ό μ‚¬μš©
  4. * μ‚°μˆ μ—°μ‚°μžλ₯Ό μ‚¬μš©

λΆˆλ¦¬μ–Έ νƒ€μž…μœΌλ‘œ λ³€ν™˜

  1. Boolean μƒμ„±μž ν•¨μˆ˜ new ν‚€μ›Œλ“œ 없이 호좜
  2. !λΆ€μ • 논리 μ—°μ‚°μžλ₯Ό 두 번 μ‚¬μš©
    // 2. ! λΆ€μ • 논리 μ—°μ‚°μžλ₯Ό λ‘λ²ˆ μ‚¬μš©ν•˜λŠ” 방법
    // λ¬Έμžμ—΄ νƒ€μž… => λΆˆλ¦¬μ–Έ νƒ€μž…
    !!'x';       // -> true
    !!'';        // -> false
    !!'false';   // -> true
    // 숫자 νƒ€μž… => λΆˆλ¦¬μ–Έ νƒ€μž…
    !!0;         // -> false
    !!1;         // -> true
    !!NaN;       // -> false
    !!Infinity;  // -> true
    // null νƒ€μž… => λΆˆλ¦¬μ–Έ νƒ€μž…
    !!null;      // -> false
    // undefined νƒ€μž… => λΆˆλ¦¬μ–Έ νƒ€μž…
    !!undefined; // -> false
    // 객체 νƒ€μž… => λΆˆλ¦¬μ–Έ νƒ€μž…
    !!{};        // -> true
    !![];        // -> true

단좕 평가

λ‹¨μΆ•ν‰κ°€λž€ ν‘œν˜„μ‹μ„ ν‰κ°€ν•˜λŠ” 도쀑에 평가 κ²°κ³Όκ°€ ν™•μ •λœ 경우 λ‚˜λ¨Έμ§€ 평가 과정을 μƒλž΅ν•˜λŠ” 것을 λ§ν•œλ‹€.

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

  • 논리 μ—°μ‚°μ˜ κ²°κ³Όλ₯Ό κ²°μ •ν•œ ν”Όμ—°μ‚°μžλ₯Ό νƒ€μž…λ³€ν™˜ν•˜μ§€ μ•Šκ³  κ·ΈλŒ€λ‘œ λ°˜ν™˜ν•œλ‹€.
  • 단좕 평가λ₯Ό μ‚¬μš©ν•œ ifλ¬Έ λŒ€μ²΄
    var trueChk = true;
    var falseChk = false;
    

const msg = trueChk && 'μ™„λ£Œ'; // trueμΌλ•Œ 만 μ™„λ£Œλ₯Ό ν• λ‹Ή
const msg2 = falseChk || 'λ―Έμ™„λ£Œ' // false μΌλ•Œλ§Œ λ―Έμ™„λ£Œ ν• λ‹Ή

- 객체λ₯Ό 가리킀기λ₯Ό κΈ°λŒ€ν•˜λŠ” λ³€μˆ˜κ°€ null λ˜λŠ” undefinedκ°€ μ•„λ‹Œμ§€ ν™•μΈν•˜κ³  ν”„λ‘œνΌν‹°λ₯Ό μ°Έμ‘°ν•  λ•Œ 유용
```js
var elem = null;
var value = elem && elem.value; // null,
// null μ²΄ν¬μ•ˆν•˜λ©΄ μ›λž˜λŠ” μ—λŸ¬

μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μž

  • μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μž : ?.
  • μ’Œν•­μ˜ ν”Όμ—°μ‚°μžκ°€ null λ˜λŠ” undefined일 경우 undefined λ°˜ν™˜, 그렇지 μ•ŠμœΌλ©΄ μš°ν•­μ˜ ν”„λ‘œνΌν‹°λ₯Ό μ°Έμ‘°
  • ν”Όμ—°μ‚°μžκ°€ false둜 ν‰κ°€λ˜λŠ” κ²½μš°λΌλ„ null λ˜λŠ” undefined κ°€ μ•„λ‹ˆλΌλ©΄ μš°ν•­μ˜ ν”„λ‘œνΌν‹° μ°Έμ‘°λ₯Ό 이어간닀

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

  • μ’Œν•­μ˜ ν”Όμ—°μ‚°μžκ°€ null λ˜λŠ” undefined인 경우 μš°ν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό λ°˜ν™˜ν•˜κ³  그렇지 μ•ŠμœΌλ©΄ μ’Œν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό λ°˜ν™˜
  • λ³€μˆ˜μ˜ 기본값을 μ„€μ •ν•  λ•Œ 유용

λŒ“κΈ€