Skip to main content

πŸ“’ you don't know JS

2023-02-10#


CHAPTER 1. νƒ€μž…#

7가지 λ‚΄μž₯ νƒ€μž…#

  • null
  • undefined
  • boolean
  • number
  • string
  • object
  • symbol

undefined !== undeclared#

  • undefined : μ„ μ–Έλœ λ³€μˆ˜μ— ν• λ‹Ήν•  수 μžˆλŠ”κ°’
  • undeclared : λ³€μˆ˜ μžμ²΄κ°€ μ„ μ–Έλœμ  μ—†μŒ
  • λ‘˜λ‹€ νƒ€μž…μ€ undefined둜 λ‚˜μ˜΄

CHAPTER 2.κ°’#

  • 배열은 λͺ¨λ“  νƒ€μž…μ˜ 값듀을 숫자둜 μΈλ±μ‹±ν•œ 집합
  • λ¬Έμžμ—΄μ€ μΌμ’…μ˜ μœ μ‚¬λ°°μ—΄
  • μˆ«μžλŠ” μ •μˆ˜μ™€ λΆ€λ™μ†Œμˆ˜μ  숫자 λͺ¨λ‘ 포함

Undefinedλ₯Ό μ‹λ³„μžλ‘œ μ“Έ 수 μžˆλ‹€.#

  • λŠμŠ¨ν•œ λͺ¨λ“œμ—μ„œ μ „μ—­μŠ€μ½”ν”„μ—μ„œ undefined에 값을 ν• λ‹Ήν•  수 있음 (κ°œλΉ„μΆ”)
  • λͺ¨λ“œμ— 상관없이 undefinedλΌλŠ” 이름을 가진 μ§€μ—­λ³€μˆ˜ 생성가λŠ₯ (끔찍)

νŠΉμ΄ν•œ 동등 비ꡐ#

  • Object.is()λ₯Ό μ‚¬μš©ν•œ NaN, -0비ꡐ
  • NaN !== NaN (λΉ„κ΅λΆˆλŠ₯), -0은 λ³΄ν†΅μ˜ 0κ³Ό λ™λ“±ν•œμ²™ν•¨
  • == λ‚˜ === κ°€ μ•ˆμ „ν•˜λ‹€λ©΄ ꡳ이 μ“Έν•„μš” μ—†μŒ. κΈ°λ³Έμ—°μ‚°μžκ°€ μ’€ 더 효율이 μ’‹κ³  일반적이기 λ•Œλ¬Έμ΄λ‹€.
const a = 2 / "foo"
const b = -3 * 0
Object.is(a, NaN) // true
Object.is(b, -0) // true
Object.is(b, 0) // false

2023-02-24#


CHAPTER 3... 4#

5.λŠμŠ¨ν•œ/μ—„κ²©ν•œ 동등 비ꡐ

== λŠ” κ°’μ˜ 동등함을

===λŠ” κ°’κ³Ό νƒ€μž… λͺ¨λ‘μ˜ 동등함을 λΉ„κ΅ν•œλ‹€. 라고 μ˜€ν•΄ν•œλ‹€. μ •ν™•ν•˜μ§€ μ•Šλ‹€.

μ •ν™•ν•œ μ •μ˜λŠ”

동등함 λΉ„κ΅μ‹œ ==λŠ” κ°•μ œλ³€ν™˜μ„ ν—ˆμš©ν•˜μ§€λ§Œ, ===λŠ” κ°•μ œλ³€ν™˜μ„ ν—ˆμš©ν•˜μ§€ μ•ŠμŒ!!

비ꡐ μ„±λŠ₯#

νƒ€μž…μ΄ λ‹€λ₯Έ 두 κ°’μ˜ 동등 λΉ„κ΅μ—μ„œ μ€‘μš”ν•œ 것은 λΉ„κ΅κ³Όμ •μ—μ„œ κ°•μ œλ³€ν™˜μ˜ κ°œμž… μ—¬λΆ€ μž„.

κ°•μ œλ³€ν™˜μ΄ ν•„μš”ν•˜λ‹€λ©΄ λŠμŠ¨ν•œ 동등 μ—°μ‚°μž (==)λ₯Ό,

ν•„μš”ν•˜μ§€ μ•Šλ‹€λ©΄ μ—„κ²©ν•œ 동등 μ—°μ‚°μž (===)λ₯Ό μ‚¬μš©ν•˜μž.

μ–΄μ°¨ν”Ό ==λ“  ===λ“  ν”Όμ—°μ‚°μžμ˜ νƒ€μž…μ„ μ²΄ν¬ν•˜λŠ”κ±΄ λ§€ν•œκ°€μ§€.

λ‹€λ₯Έμ μ€ νƒ€μž…μ΄ λ‹€λ₯Όλ•Œ 이후 처리 λ‘œμ§μž„.

예제

const a = "42"
const b = true
a == b // false
// 42λŠ” truthyν•œ κ°’μ΄λ‹ˆ == λΉ„κ΅ν•˜λ©΄ trueκ°€ μ•„λ‹κΉŒ μƒκ°ν•˜μ§€λ§Œ falseκ°€ λ‚˜μ˜΄

ES5 11.9.3.6-7

  1. Type(x) κ°€ λΆˆλ¦¬μ–Έμ΄λ©΄ ToNumber(x) == y의 비ꡐ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€.
  2. Type(y) κ°€ λΆˆλ¦¬μ–Έμ΄λ©΄ x == ToNumber(y)의 비ꡐ κ²°κ³Όλ₯Ό λ°˜ν™˜ν•œλ‹€.
const x = true
const y = "42"
x == y // false
// Type(x)λŠ” λΆˆλ¦¬μ–Έμ΄λ―€λ‘œ ToNumner(x) -> 1 둜 κ°•μ œλ³€ν™˜ λœλ‹€.
// λ”°λΌμ„œ 1 == "42" κ°€ λ˜λŠ”λ° νƒ€μž…μ΄ 닀름
// "42"λŠ” 42둜 λ°”λ€Œκ³ 
// 1 == 42 -> falseκ°€ λœλ‹€.

β€œ42β€λŠ” truthy도 falsy도 μ•„λ‹Œκ°’μΈκ°€?

β€œ42”가 λΆˆλ¦¬μ–ΈμœΌλ‘œ κ°•μ œλ³€ν™˜ λ˜λŠ”κ²ƒμ΄ μ•„λ‹ˆλΌ trueκ°€ 1둜 κ°•μ œλ³€ν™˜λ˜κ³  κ·Έ ν›„ β€œ42”가 42둜 κ°•μ œλ³€ν™˜ λ˜λŠ”κ²ƒ.

ToBoolean은 μ „ν˜€ κ°œμž…ν•˜μ§€ μ•Šκ³  β€œ42” κ°’ 자체의 truthy/ falsy μ—¬λΆ€λŠ” == μ—°μ‚°κ³Ό μ „ν˜€ 무관함.