πŸ€– Coercion in Javascript

2019. 04. 13

Seungwoo Hong

@sat10am

πŸ“š INDEX

1. Duck Typing

2. Dynamic / Static and Strong / Weak

3. Implicit coercion​

4. Explicit coercion​

πŸ₯ Duck Typing

πŸ™„ μˆ«μžκ°€ λ‚˜μ™€μ•Ό λ˜λŠ”λ°..

🧐 Duck Typing μž₯점, 단점

μž₯점

Β  1. νƒ€μž…μ— μžˆμ–΄μ„œ μžμœ λ‘­λ‹€.

Β  2. μ½”λ“œμ— μœ μ—°μ„±μ΄ 생긴닀.

Β 

단점

Β  1. λŸ°νƒ€μž„ ν™˜κ²½μ—μ„œ μ˜ˆμƒ λͺ»ν•œ κ°’μœΌλ‘œ 였λ₯˜κ°€ λ°œμƒ ν•  수 μžˆλ‹€.

Β  2. νƒ€μž… 체킹을 μœ„ν•œ 좔가적인 μž‘μ—…μ΄ ν•„μš”ν•˜λ‹€.

Β 

Β 

🐳
Dynamic / StaticΒ 

Strong / Weak

Static typing - 컴파일 ν•˜λŠ” μ‹œμ μ— νƒ€μž… 체킹

DynamicΒ  typing - λŸ°νƒ€μž„ μ‹œμ μ— νƒ€μž… 체킹

Static typing

1. Check types

2. Run

Β 

DynamicΒ  typing

1. Run

2. Check types

Β 

Strong type

λ§žμ§€ μ•ŠλŠ” νƒ€μž…μ΄ μžˆμ„λ•Œ μ—λŸ¬λ₯Ό λ°œμƒ μ‹œν‚¨λ‹€.

Β 

WeakΒ  type

λ§žμ§€ μ•ŠλŠ” νƒ€μž…μ΄ μžˆμ„λ• μ•”λ¬΅μ μœΌλ‘œ λ³€ν™˜ν•˜μ—¬ μ‹€ν–‰ μ‹œμΌœμ€€λ‹€.

πŸ¦‰ Implicit coercion​

μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ μžλ™μœΌλ‘œ νƒ€μž…μ΄ λ³€ν™˜ λœλ‹€.

'+' μ—°μ‚°μž

1. μˆ˜ν•™μ μΈ λ§μ…ˆ

2. λ¬Έμžμ—΄ ν•©μΉ˜κΈ°

'+' μ—°μ‚°μžλ₯Ό μ‚¬μš©ν•˜μ—¬ λ¬Έμžμ—΄λ‘œ λ³€ν™˜

πŸ’― 숫자둜 λ³€ν™˜

'+' 단항 μ—°μ‚°μžλ₯Ό μ΄μš©ν•œ μ•”μ‹œμ  λ³€ν™˜

'+' 단항 μ—°μ‚°μžλ₯Ό μ΄μš©ν•œ μ•”μ‹œμ  λ³€ν™˜

Boolean λ³€ν™˜

비ꡐ, 논리 μ—°μ‚°μžκ°€ μ‚¬μš© λ˜κ±°λ‚˜ if, forλ¬Έλ“±μ˜ μ‘°κ±΄μ‹μ—μ„œ μ•”μ‹œμ μΈ λ³€ν™˜μ΄ λ°œμƒν•œλ‹€.

Boolean λ³€ν™˜

7 κ°€μ§€ Falsy value

  • false
  • 0
  • -0
  • null
  • undefined
  • ''
  • NaN

7 κ°€μ§€ Falsy value

πŸ‡toString()

String으둜 μ•”μ‹œμ  λ³€ν™˜μ΄ μΌμ–΄λ‚˜μ•Ό λ λ•Œλ§ˆλ‹€ 호좜 λ˜λŠ” ν•¨μˆ˜

πŸ‡valueOf()

값을 λ„˜κ²¨μ•Ό λ λ•Œλ§ˆλ‹€ μ›μ‹œ 값을 λ„˜κΈ°λŠ” ν•¨μˆ˜

πŸ‡valueOf() vs toString()

값을 λ„˜κ²¨μ•Ό λ λ•Œλ§ˆλ‹€ μ›μ‹œ 값을 λ„˜κΈ°λŠ” ν•¨μˆ˜

🀩 NaN

1. type of NaN

2. NaN은 μ–΄λ–€ κ°’μ΄λž‘ λΉ„κ΅ν•˜λ˜ false

Β 

πŸ±β€πŸ‘“ isNaN vs Number.isNaN

isNaN - 값이 NaN인지 μ•„λ‹Œμ§€ νŒλ³„ν•˜κ³  Not a NumberΒ λ₯ΌνŒλ³„ν•œλ‹€.

Β 

Number.isNaN - ν˜„μž¬ 값이 NaNμΌλ•Œλ§Œ True λ°˜ν™˜

πŸ±β€πŸ‘“ isNaN vs Number.isNaN

🐝 Explicit coercion​

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

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

2. Object.prototype.toString λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 방법

Β 

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

Object.prototype.toString λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•˜λŠ” 방법

🐀 숫자둜 λͺ…μ‹œμ  λ³€ν™˜

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

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

Β 

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

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

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

Boolean()Β ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 방법

🐱 Javascript is

Duck typing

Β 

Weak type

Β 

Dynamic typing

Β 

Thank you.

Coercion in Javascript

By Seungwoo Hong

Coercion in Javascript

  • 337