ν•΄λ²„λ‹ˆ 2025. 3. 13. 18:12
λ°˜μ‘ν˜•

 

이쀑 λ“±ν˜ΈλŠ”(==)λŠ” 두 λŒ€μƒμ„ 비ꡐ할 λ•Œ μœ ν˜• λ³€ν™˜μ„ μˆ˜ν–‰ν•œ λ’€ 비ꡐλ₯Ό μˆ˜ν–‰ν•œλ‹€.

 

 

 == (λŠμŠ¨ν•œ 비ꡐ / 동등 μ—°μ‚°μž)

console.log(0 == "0"); // true
console.log(5 == '5'); // true 

console.log(null == undefined); // true

 

==λŠ” νƒ€μž… λ³€ν™˜μ„ μžλ™μœΌλ‘œ μˆ˜ν–‰ν•œλ‹€.

κ·Έλž˜μ„œ 숫자 5와 문자 "5"λ₯Ό μžλ™μœΌλ‘œ νƒ€μž… λ³€ν™˜ν•˜μ—¬ 비ꡐλ₯Ό μˆ˜ν–‰ν•œλ‹€.

이 경우, 값이 κ°™κΈ° λ•Œλ¬Έμ— trueλ₯Ό λ°˜ν™˜ν•œλ‹€.

 

nullκ³Ό unddefinedλŠ” 빈 값을 λ‚˜νƒ€λ‚΄λ―€λ‘œ κ°™λ‹€κ³  ν‰κ°€λœλ‹€.

 

 

 

 

=== (μ—„κ²©ν•œ 비ꡐ / 일치 μ—°μ‚°μž)

console.log(0 == "0"); // false
console.log(5 == '5'); // false

console.log(null == undefined); // false

 

 

κ°’λΏλ§Œ μ•„λ‹ˆλΌ νƒ€μž…μ΄ μ •ν™•νžˆ μΌμΉ˜ν•΄μ•Ό trueλ₯Ό λ°˜ν™˜ν•œλ‹€.

5와 "5"λŠ” 값은 κ°™μ§€λ§Œ νƒ€μž…μ΄ λ‹€λ₯΄λ―€λ‘œ falseλ₯Ό λ°˜ν™˜ν•œλ‹€.

그리고, nullκ³Ό undefinedλŠ” νƒ€μž…μ΄ λ‹€λ₯΄λ―€λ‘œ falseλ₯Ό λ°˜ν™˜ν•œλ‹€.

 
 
null은 object νƒ€μž…, undefinedλŠ” undefined νƒ€μž…μ΄λ‹€.
 
 
 
 
 
 
 
 

 ===λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 더 μ•ˆμ „ν•˜κ³  예츑 κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 데 μ’‹λ‹€! 

 

 

==(λŠμŠ¨ν•œ 비ꡐ)κ°€ μœ„ν—˜ν•œ 이유

==λŠ” νƒ€μž… λ³€ν™˜(암묡적 ν˜•λ³€ν™˜, Coercion) 을 ν•˜λ©΄μ„œ λΉ„κ΅ν•˜κΈ° λ•Œλ¬Έμ—, μ˜ˆμƒμΉ˜ λͺ»ν•œ κ²°κ³Όκ°€ λ‚˜μ˜¬ 수 μžˆλ‹€.
즉, κ°œλ°œμžκ°€ μ˜λ„ν•˜μ§€ μ•Šμ€ 값이 true둜 평가될 μˆ˜λ„ 있고, λ²„κ·Έλ‘œ μ΄μ–΄μ§ˆ κ°€λŠ₯성이 λ†’λ‹€!

 

 

πŸ“Œ λͺ‡ 가지 μœ„ν—˜ν•œ 사둀

λΆˆλ¦¬μ–Έ κ°’ λ³€ν™˜

console.log(false == 0); // true (false → 0 λ³€ν™˜)
console.log("" == 0); // true ("" → 0 λ³€ν™˜)

 

false와 빈 λ¬Έμžμ—΄ ""λŠ” μžλ™μœΌλ‘œ 0으둜 λ³€ν™˜λ˜μ–΄ 숫자 0κ°€ λΉ„κ΅λ˜κΈ° λ•Œλ¬Έμ— trueκ°€ λ°˜ν™˜λœλ‹€. 

 

 

곡백 λ¬Έμžμ™€ 숫자 비ꡐ

console.log(" \t\n" == 0); // true (곡백 λ¬Έμžλ“€λ„ 0으둜 λ³€ν™˜λ¨)

 

곡백 λ¬ΈμžλŠ” 빈 λ¬Έμžμ—΄κ³Ό λ™μΌν•˜κ²Œ μ·¨κΈ‰λ˜μ–΄ 숫자 0으둜 λ³€ν™˜λœλ‹€.

 

 

nullκ³Ό undefined 비ꡐ

console.log(null == undefined); // true (λ‘˜ λ‹€ λΉ„μ–΄μžˆλ‹€κ³  νŒλ‹¨)

 

 

 

 

 ===(μ—„κ²©ν•œ 비ꡐ)κ°€ μ•ˆμ „ν•œ 이유

console.log(false === 0); // false
console.log("" === 0); // false 
console.log(null === undefined); // false 
console.log(" \t\n" === 0); // false

 

===λŠ” νƒ€μž…κΉŒμ§€ κ²€μ‚¬ν•˜κΈ° λ•Œλ¬Έμ—, μ˜ˆμΈ‘ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

ν˜•λ³€ν™˜μ΄ μΌμ–΄λ‚˜μ§€ μ•Šμ•„μ„œ, κ°œλ°œμžκ°€ μ˜λ„ν•œ λŒ€λ‘œ μ •ν™•ν•˜κ²Œ 비ꡐ할 수 μžˆλ‹€.

 


 

 

 

λ¬Όλ‘ , 빈 값을 κ΅¬λΆ„ν•˜κΈ° μœ„ν•΄μ„œ ==κ°€ κΌ­ ν•„μš”ν•œ 상황도 μžˆμ§€λ§Œ(예: null == undefined 비ꡐ μ‹œ), 그게 μ•„λ‹ˆλΌλ©΄ 무쑰건 ===λ₯Ό μ“°λŠ” 게 더 μ•ˆμ „ν•˜κ³  쒋은 μŠ΅κ΄€μ΄λ‹€.

 

 

x y == === Object.is SameValueZero
undefined undefined βœ… true βœ… true βœ… true βœ… true
null null βœ… true βœ… true βœ… true βœ… true
true true βœ… true βœ… true βœ… true βœ… true
false false βœ… true βœ… true βœ… true βœ… true
'foo' 'foo' βœ… true βœ… true βœ… true βœ… true
0 0 βœ… true βœ… true βœ… true βœ… true
+0 -0 βœ… true βœ… true ❌ false βœ… true
+0 0 βœ… true βœ… true βœ… true βœ… true
-0 0 βœ… true βœ… true ❌ false βœ… true
0n -0n βœ… true βœ… true βœ… true βœ… true
0 false βœ… true ❌ false ❌ false ❌ false
"" false βœ… true ❌ false ❌ false ❌ false
"" 0 βœ… true ❌ false ❌ false ❌ false
'0' 0 βœ… true ❌ false ❌ false ❌ false
'17' 17 βœ… true ❌ false ❌ false ❌ false
[1, 2] '1,2' βœ… true ❌ false ❌ false ❌ false
new String('foo') 'foo' βœ… true ❌ false ❌ false ❌ false
null undefined βœ… true ❌ false ❌ false ❌ false
null false ❌ false ❌ false ❌ false ❌ false
undefined false ❌ false ❌ false ❌ false ❌ false
{ foo: 'bar' } { foo: 'bar' } ❌ false ❌ false ❌ false ❌ false
new String('foo') new String('foo') ❌ false ❌ false ❌ false ❌ false
0 null ❌ false ❌ false ❌ false ❌ false
0 NaN ❌ false ❌ false ❌ false ❌ false
'foo' NaN ❌ false ❌ false ❌ false ❌ false
NaN NaN ❌ false ❌ false βœ… true βœ… true

 

 

 

 

https://developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Equality_comparisons_and_sameness

 

동등 비ꡐ 및 동일성 - JavaScript | MDN

JavaScriptλŠ” λ‹€μŒ μ„Έ κ°€μ§€μ˜ κ°’ 비ꡐ 연산을 μ œκ³΅ν•©λ‹ˆλ‹€.

developer.mozilla.org

 

 

λ°˜μ‘ν˜•