[Language/JavaScript] 동등비ꡐ

2024. 2. 26. 15:41γ†πŸ”€ Language/JavaScript

ν•„μš”μ„± / μ€‘μš”μ„±

λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈ λ Œλ”λ§μ΄ μΌμ–΄λ‚˜λŠ” μ€‘μš” 원인 쀑 ν•˜λ‚˜κ°€ props의 동등 비ꡐ에 λ”°λ₯Έ 결과이닀. JSμ—μ„œμ˜ 동등비ꡐ가 μΌμ–΄λ‚˜λŠ” λ‘œμ§μ— λŒ€ν•΄ 잘 μ•Œκ³  μžˆμ–΄μ•Ό λ Œλ”λ§ λ°©μ§€ 및 λ Œλ”λ§ μ΅œμ ν™” λ“±μ˜ κΈ°λŠ₯을 μ˜¬λ°”λ‘œ ν™œμš©ν•  수 μžˆλ‹€.


데이터 νƒ€μž… / 값을 μ €μž₯ν•˜λŠ” λ°©μ‹μ˜ 차이

μ›μ‹œ νƒ€μž…(primitive type)κ³Ό 객체 νƒ€μž…(object/reference type)이 μžˆλŠ”λ°, 객체λ₯Ό μ œμ™Έν•œ λͺ¨λ“  것듀이 μ›μ‹œ νƒ€μž…μ— μ†ν•œλ‹€.
μ›μ‹œ νƒ€μž…μ€ λΆˆλ³€ ν˜•νƒœμ˜ κ°’μœΌλ‘œ μ €μž₯되고, 객체 νƒ€μž…μ€ λ³€κ²½ κ°€λŠ₯ν•œ ν˜•νƒœλ‘œ μ €μž₯이 λœλ‹€.
κ°μ²΄λŠ” λˆˆμ— λ³΄μ΄λŠ” valueκ°€ λ™μΌν•˜λ”λΌλ„ μ°Έμ‘°κ°€ λ‹€λ₯΄κΈ° λ•Œλ¬Έμ— 값이 κ°™μ§€ μ•Šλ‹€.
κ·ΈλŸ¬λ‚˜ 같은 valueλŠ” λ™μΌν•œ μ£Όμ†Œμ— μ €μž₯이 λ˜κΈ°μ— 비ꡐ κ²°κ³Όκ°€ κ°™κ²Œ λ‚˜μ˜¨λ‹€.

const hello1 = {greet: 'hello, world'}
const hello2 = {greet: 'hello, world'}

hello1 === hello2 // false
hello1.greet === hello2.greet // true

값을 λΉ„κ΅ν•˜λŠ” 방식

==λŠ” jsμ—μ„œ μžλ™μœΌλ‘œ ν˜•μ„ λ³€ν™˜μ‹œμΌœ λΉ„κ΅ν•˜μ—¬ λΆˆμ™„μ „ν•˜λ‹€
'5' == 5 //true
'5' === 5 // false

Object.isλŠ” ===의 ν•œκ³„κΉŒμ§€ κ·Ήλ³΅ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ§„ λ°©λ²•μ΄μ§€λ§Œ μ—¬μ „νžˆ 객체 λΉ„κ΅μ—μ„œλŠ” ν•œκ³„λ₯Ό κ°€μ§€κ³  μžˆλ‹€.


λ¦¬μ•‘νŠΈμ—μ„œ κ°’μ˜ 비ꡐ

객체간 비ꡐλ₯Ό μ’€ 더 μ •ν™•ν•˜κ²Œ μˆ˜ν–‰ν•˜κΈ° μœ„ν•˜μ—¬ λ¦¬μ•‘νŠΈμ—μ„œ shallowEqualμ΄λΌλŠ” ν•¨μˆ˜λ₯Ό μ œκ³΅ν•œλ‹€.
이 ν•¨μˆ˜λŠ” 얕은 비ꡐλ₯Ό μˆ˜ν–‰ν•˜λŠ” λ‘œμ§μ„ κ°€μ§€μ§€λ§Œ κΉŠμ€ 객체(객체 μ•ˆμ— 또 λ‹€λ₯Έ 객체λ₯Ό κ°€μ§ˆ λ•Œμ—)에 λŒ€ν•΄μ„œλŠ” 비ꡐλ₯Ό μˆ˜ν–‰ν•˜μ§€ μ•ŠλŠ”λ‹€.
기본적으둜 λ¦¬μ•‘νŠΈλŠ” propsμ—μ„œ κΊΌλ‚΄μ˜¨ 값을 κΈ°μ€€μœΌλ‘œ λžœλ”λ§μ„ μˆ˜ν–‰ν•˜κΈ°μ— 얕은 λΉ„κ΅λ‘œ μΆ©λΆ„ν•œ κ²½μš°κ°€ λ§Žλ‹€.


Reference: λͺ¨λ˜ λ¦¬μ•‘νŠΈ Deep Dive 1.1 μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 동등비ꡐ