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

μ˜€μ€λΉ„Β·2023λ…„ 3μ›” 4일
0

μžλ°”μŠ€ν¬λ¦½νŠΈ

λͺ©λ‘ 보기
3/3
post-thumbnail

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

🌊 νƒ€μž… λ³€ν™˜μ΄λž€?

  • κ°œλ°œμžκ°€ μ˜λ„μ μœΌλ‘œ κ°’μ˜ νƒ€μž…μ„ λ³€ν™˜ν•˜λŠ” 것을 λͺ…μ‹œμ  νƒ€μž… λ³€ν™˜ λ˜λŠ” νƒ€μž… μΊμŠ€νŒ…
  • 개발자의 μ˜λ„μ™€λŠ” 상관없이 ν‘œν˜„μ‹μ„ ν‰κ°€ν•˜λŠ” 도쀑에 JS엔진에 μ˜ν•΄ μ•”λ¬΅μ μœΌλ‘œ νƒ€μž…μ΄ λ³€ν™˜ λ˜λŠ” 것을 암묡적 νƒ€μž… λ³€ν™˜ λ˜λŠ” νƒ€μž… κ°•μ œ λ³€ν™˜ 이라 ν•œλ‹€.
// λͺ…μ‹œμ  νƒ€μž…λ³€ν™˜
let x = 10;
let str = x.toString();
console.log(typeof str, str); // string 10

// 암묡적 νƒ€μž… λ³€ν™˜
let y = 10;
let str2 = y + '';
console.log(typeof str2, str2); // string 10


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

πŸ“Œ λ¬Έμžμ—΄λ‘œ λ³€ν™˜

1 + '2' // β†’ "12"

+ μ—°μ‚°μžλŠ” ν”Όμ—°μ‚°μž 쀑 ν•˜λ‚˜ 이상이 λ¬Έμžμ—΄μ΄λ©΄ λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μžλ‘œ λ™μž‘ν•˜μ—¬ λ¬Έμžμ—΄ 값을 λ§Œλ“ λ‹€.

`1 + 1 = ${1 + 1}` // β†’ "1 + 1 = 2 "

ES6μ—μ„œ λ„μž…λœ ν…œν”Œλ¦Ώ λ¦¬ν„°λŸ΄μ˜ ν‘œν˜„μ‹ μ‚½μž…μ€ ν‘œν˜„μ‹μ˜ 평가 κ²°κ³Όλ₯Ό λ¬Έμžμ—΄ γ„Ήνƒ€μž…μœΌλ‘œ 암묡적 νƒ€μž… λ³€ν™˜μ„ μ‹œν‚¨λ‹€.


#### πŸ“Œ μˆ«μžμ—΄λ‘œ λ³€ν™˜
  1. μ‚°μˆ  μ—°μ‚°μž

    1 - '1' // β†’ 0
    1 * '10' // β†’ 10
    1 / 'one' // β†’ NaN
  2. 비ꡐ μ—°μ‚°μž

    '1'>0 // β†’ true
  3. 단항 μ—°μ‚°μž +

    +'' // β†’ 0
    +'1' // β†’ 1
    +'string' // β†’ NaN
    
    +true // β†’ 1
    +false // β†’ 0
    
    +null // β†’ 0
    
    +undefined // β†’ NaN
    
    +Symbol() // β†’ TypeError
    
    +{} // β†’ NaN
    +[] // β†’ 0
    +[10, 20] // β†’ NaN
    +(function(){}) // β†’ NaN

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

  • ifλ¬Έκ³Ό forλ¬Έ
if('') console.log('1'); // β†’ ❌
if(true) console.log('2'); // β†’ ⭕️
if(0) console.log('3'); // β†’ ❌ 
if('str') console.log('4'); // β†’ ⭕️
if(null) console.log('5'); // β†’ ❌
// 2 4

πŸ“Œ μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ Truthy κ°’(μ°Έ)κ³Ό Flasy κ°’(거짓)

Falsy κ°’

  • false
  • undefined
  • null
  • 0, -0
  • NaN
  • ''(빈 λ¬Έμžμ—΄)

Truthy κ°’
: Falsy κ°’ μ™Έμ˜ λͺ¨λ“  값은 true둜 ν‰κ°€λ˜λŠ” Truthy 값이닀.



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

πŸ“Œ λ¬Έμžμ—΄λ‘œ λ³€ν™˜

  • String μƒμ„±μž ν•¨μˆ˜λ₯Ό new μ—°μ‚°μž 없이 호좜
  • Object.prototype.toString λ©”μ„œλ“œ μ‚¬μš©
  • λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μž 이용
// 1. String μƒμ„±μž ν•¨μˆ˜λ₯Ό new μ—°μ‚°μž 없이 호좜

String(1); // β†’ "1"
String(NaN); // β†’ "NaN"
String(true); // β†’ "true"


// 2. Object.prototype.toString λ©”μ„œλ“œ μ‚¬μš©

(1).toString(); // β†’ '1'
(NaN).toString(); // β†’ 'NaN'
(true).toString(); // β†’ 'true'


// 3. λ¬Έμžμ—΄ μ—°κ²° μ—°μ‚°μž 이용

1 + ''; // β†’ '1'
NaN + ''; // β†’ 'NaN'
true + ''; // β†’ 'true'

πŸ“Œ μˆ«μžμ—΄λ‘œ λ³€ν™˜

  • Number μƒμ„±μž ν•¨μˆ˜λ₯Ό new μ—°μ‚°μž 없이 호좜
  • paresInt, parseFloat ν•¨μˆ˜ μ‚¬μš© (λ¬Έμžμ—΄ β†’ μˆ«μžνƒ€μž…λ§Œ κ°€λŠ₯)
  • + 단항 μ‚°μˆ  μ—°μ‚°μž 이용
  • * 단항 μ‚°μˆ  μ—°μ‚°μž 이용
// 1. Number μƒμ„±μž ν•¨μˆ˜λ₯Ό new μ—°μ‚°μž 없이 호좜

Number('0') // β†’ 0
Number('-1') // β†’ -1
Number('59.59') // β†’ 59.59
Number(true) // β†’ true


// 2. paresInt, parseFloat ν•¨μˆ˜ μ‚¬μš© (λ¬Έμžμ—΄ β†’ μˆ«μžνƒ€μž…λ§Œ κ°€λŠ₯)
// parseInt : μ •μˆ˜ λ˜λŠ” NaN λ°˜ν™˜ ν•¨μˆ˜
// parseFloat : 뢀동 μ†Œμˆ˜μ  숫자 λ°˜ν™˜ ν•¨μˆ˜

parseInt('0') // β†’ 0
parseInt('-1') // β†’ -1
parseInt('59.59') // β†’ 59.59


// 3. `+` 단항 μ‚°μˆ  μ—°μ‚°μž 이용

+'0'; // β†’ 0
+'-1'; // β†’ -1
+'59.59'; // β†’ 59.59
+true; // β†’ 1
+false; // β†’ 0


// 4. `*` 단항 μ‚°μˆ  μ—°μ‚°μž 이용

'0' * 1; // β†’ 0
'-1' * 1; // β†’ -1
'59.59' * 1; // β†’ 59.59
true * 1; // β†’ 1
false * 1; // β†’ 0

πŸ“Œ λΆˆλ¦¬μ–ΈμœΌλ‘œ λ³€ν™˜

  • Boolean μƒμ„±μž ν•¨μˆ˜λ₯Ό new μ—°μ‚°μž 없이 호좜
  • ! λΆ€μ • 논리 μ—°μ‚°μžλ₯Ό 두 번 μ‚¬μš©ν•˜λŠ” 방법
// 1. Boolean μƒμ„±μž ν•¨μˆ˜λ₯Ό new μ—°μ‚°μž 없이 호좜

Boolean('x'); // β†’ true
Boolean(''); // β†’ false
Boolean('false'); // β†’ true
Boolean(0); // β†’ false
Boolean(1) // β†’ true
Boolean(NaN) // β†’ false
Boolean(Infinity) // β†’ true
Boolean({}) // β†’ true
Boolean([]) // β†’ true


// 2. ! λΆ€μ • 논리 μ—°μ‚°μžλ₯Ό 두 번 μ‚¬μš©ν•˜λŠ” 방법
!!'x';  // β†’ true
!!'';  // β†’ false
!!5;  // β†’ true
!!NaN;  // β†’ false
!!null;  // β†’ false
!!undefined;  // β†’ false
!!{};  // β†’ true
!![];  // β†’ ture



🌊 단좕 평가

: 논리 μ—°μ‚°μ˜ κ²°κ³Όλ₯Ό κ²°μ •ν•˜λŠ” ν”Όμ—°μ‚°μžλ₯Ό νƒ€μž… λ³€ν™˜ν•˜μ§€ μ•Šκ³  κ·ΈλŒ€λ‘œ λ°˜ν™˜
( λ…Όλ¦¬μ—°μ‚°μžλŠ” μ’Œν•­μ—μ„œ μš°ν•­μœΌλ‘œ 평가가 μ§„ν–‰λœλ‹€.)

단좕 평가 ν‘œν˜„μ‹ν‰κ°€ κ²°κ³Ό
true || anythingtrue
false || anythinganything
true && anythinganything
false && anythingfalse

// 논리합 || 

'ogu' || 'rabbit' // β†’ 'ogu'
false || 'rabbit' // β†’ 'rabbit'
'ogu' || false // β†’ 'ogu'
'ogu' || 'rabbit' // β†’ 'ogu'

// 논리곱 &&

'ogu' && 'rabbit' // β†’ 'rabbit'
false && 'rabbit' // β†’ false
'ogu' && false // β†’ false

βš‘οΈλ‹¨μΆ• 평가λ₯Ό ν™œμš©ν•˜μ—¬ if λ¬Έ λŒ€μ²΄ν•˜κΈ°

Truthy 값일 λ•Œ && μ‚¬μš©

let done = true;
let message = ''; // 빈 λ¬Έμžμ—΄

//주어진 쑰건이 true 일 λ•Œ 
if (done) message = 'μ™„λ£Œ'

//done이 true 라면 message에 'μ™„λ£Œ'ν• λ‹Ή
message = done && 'μ™„λ£Œ';
console.log(message); // μ™„λ£Œ

Falsy 값일 λ•Œ || μ‚¬μš©

let done = false;
let message = ''; // 빈 λ¬Έμžμ—΄

//주어진 쑰건이 false 일 λ•Œ 
if (!done) message = 'λ―Έμ™„λ£Œ'

//done이 false 라면 message에 'λ―Έμ™„λ£Œ'ν• λ‹Ή
message = done || 'λ―Έμ™„λ£Œ';
console.log(message); // λ―Έμ™„λ£Œ

If ... else

let done = true;
let message = ''; // 빈 λ¬Έμžμ—΄

//μ‚Όν•­ 쑰건 μ—°μ‚°μž 
if (done) message = 'μ™„λ£Œ'
else message = 'λ―Έμ™„λ£Œ'
console.log(message); // μ™„λ£Œ

// if... else 문은 μ‚Όν•­ 쑰건  λ―Έμ™„λ£Œ';
console.log(message); // μ™„λ£Œ



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

: ES11에 λ„μž…λœ μ˜΅μ…”λ„ 체이닝 μ—°μ‚°μž ?. λŠ” μ’Œν•­μ˜ ν”Όμ—°μ‚°μžκ°€ null λ˜λŠ” undefined인 경우 undefinedλ₯Ό λ°˜ν™˜ν•˜κ³ , 그렇지 μ•ŠμœΌλ©΄ μš°ν•­μ˜ ν”„λ‘œνΌν‹°λ₯Ό μ°Έμ‘°ν•œλ‹€.

 let str = '';
 let length = str?.length;
 console.log(length); // 0
// λ³€μˆ˜ str이 빈 λ¬Έμžμ—΄μ΄κΈ° λ•Œλ¬Έμ— falsyν•˜μ—¬λ„ null, undefinedκ°€ μ•„λ‹ˆλ©΄ μš°ν•­μ˜ ν”„λ‘œνΌν‹°λ₯Ό μ°Έμ‘°ν•œλ‹€. 



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

: ES11μ—μ„œ λ„μž…λœ null 병합 μ—°μ‚°μž ??λŠ” μ’Œν•­μ˜ ν”Όμ—°μ‚°μžκ°€ null λ˜λŠ” undefined인 경우 μš°ν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό λ°˜ν™˜ν•˜κ³ , 그렇지 μ•ŠμœΌλ©΄ μ’Œν•­μ˜ ν”Όμ—°μ‚°μžλ₯Ό λ°˜ν™˜ν•œλ‹€.
β†’ λ³€μˆ˜μ— κΈ°λ³Έ 값을 μ„€μ •ν•  λ•Œ 유용

profile
λ“œλ¦Όμ˜€κ΅¬

2개의 λŒ“κΈ€

comment-user-thumbnail
2023λ…„ 3μ›” 5일

λ…Όλ¦¬ν•©μ΄λž‘ 논리곱 μ‚¬μš©ν•œ λ‹¨μΆ•ν‰κ°€λŠ” 저도 μœ μš©ν•˜κ²Œ μΌλ‹΄λ‹ˆλ‹€
μ˜΅μ…”λ„μ²΄μ΄λ‹μ€ μœ μš©ν•˜κΈ΄ ν•œλ° 저희 λ©˜ν† λ‹˜μ΄ λ„ˆλ¬΄ λ‚¨λ°œν•˜μ§€ μ•Šλ„λ‘ μ‘°μ‹¬ν•˜λΌκ³  ν•˜μ…¨μ–΄μš” 흐흙

1개의 λ‹΅κΈ€

κ΄€λ ¨ μ±„μš© 정보