[๋ด๋ณด๋ด๋ฒ] JavaScript - JavaScript Double Equals vs. Triple Equals
GitHub์ ์๋ 33 Concepts Every JavaScript Developer Should Know ๋ผ๋ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ด์ฉ ์ค ๊ณต๋ถํ๊ณ ์ถ์ ์ํฐํด์ ๋ด๊ฐ ์ ๋ฆฌํ ๊ฒธ ๊ธฐ์ตํ ๊ฒธ ์์ฑํ๋ ๋ฒ์ญ๊ธ์ด๋ค. 33๊ฐ์ง ์ค ๋ค์ฏ ๋ฒ์งธ์ธ == vs === vs typeof์ ๊ด๋ จ๋ ๋ด์ฉ์ด๋ค.
โป ๋ด๋ณด๋ด๋ฒ(๋ด๊ฐ ๋ณด๋ ค๊ณ ๋ด๊ฐ ๋ฒ์ญํ): ์์ด ์ ๊ณต์๋ ํด์ธ ์ ํํ๋ ์๋๊ธฐ์ ๋ฒ์ญ์๋ ์์ญ, ์ค์ญ, ๊ตฌ๊ธ ๋ฒ์ญ์ด ๋ฌด์ํ ๋ง์ ์ ์์ผ๋ฉฐ, ์คํ๋ ๋ง์ ์ ์๋ค. ์ ํํ ๋ด์ฉ์ ์๋ฌธ์ ์ง์ ์ดํด๋ณด๊ฑฐ๋ ๋ค๋ฅธ ์ ๋ณด๋ค์ ๋ ์ฐพ์๋ณด๋ ๊ฒ์ ์ถ์ฒํ๋ค.
(ํ์ง๋ง ๋๊ธ ํผ๋๋ฐฑ๋ ํ์ํฉ๋๋ค๐ )
์ด๋ฒ์ ๊ณ ๋ฅธ ์ํฐํด์ Brandon Morelli ๋์ด ์์ฑํ์ JavaScript — Double Equals vs. Triple Equals ์ด๋ค. ๋ด์ฉ ์ค๊ฐ์ค๊ฐ ๐ค์ด ์์ด์ฝ์ ๋ณธ๋ฌธ์ ๋์ ์์ง ์์ ๋ฒ์ญํ๋ฉฐ ์ถ๊ฐํ ๋ง์ด๋ค.
Medium
codeburst.io
๋ฌธ์
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ฒ๋ณด๊ธฐ์๋ ๋น์ทํ๊ธฐ๋ง ๋งค์ฐ ๋ค๋ฅธ ๋๋ฑ์ฑ์ ํ ์คํธํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค. == ํน์ ===๋ก ๋๋ฑํ ์ง๋ฅผ ๋น๊ตํ ์ ์๋ค. ์ด๊ฒ๋ค์ด ์ฐจ์ด์ ์ด๋ค. :
===
์๋ฐ์คํฌ๋ฆฝํธ์์ ===๋ฅผ ์ฌ์ฉํ๋ฉด ์๊ฒฉํ ๋๋ฑ(์ผ์น)์ ๋ํด์ ํ ์คํธํ๋ ๊ฒ์ด๋ค. ์ด ์๋ฏธ๋ ๋น๊ตํ๊ณ ์๋ ํ์ (ํ)๊ณผ ๊ฐ ๋ชจ๋ ๊ฐ์์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
์๊ฒฉํ ๋๋ฑ(์ผ์น)์ ๋ํ ๋ช ๊ฐ์ง ์์๋ฅผ ์ดํด๋ณด์.
์ด ์ฒซ ๋ฒ์งธ ์์์์ ์ซ์ 5๋ฅผ ์ซ์ 5์ ๋น๊ตํ๋ค. ์์ํ ๋ฐ์ ๊ฐ์ด, true๊ฐ ๋ฐํ๋๋ค. ๋ ๋ค ์ซ์์ด๊ณ ๊ฐ์ ๊ฐ 5๋ฅผ ๊ฐ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค.
5 === 5
// true
์ด ์ ์ ์ผ๋์ ๋๊ณ , true๋ฅผ ๋ฐํํ๋ ๋ ๊ฐ์ง ์์๋ฅผ ๋ ์ดํด๋ณผ ๊ฒ์ด๋ค:
'hello world' === 'hello world'
// true (Both Strings, equal values)
true === true
// true (Both Booleans, equal values)
๋ฉ์ง๋ค. ์ด์ false๋ฅผ ๋ฐํํ๋ ๋ช ๊ฐ์ง ์์๋ฅผ ์ดํด๋ณผ ๊ฒ์ด๋ค:
์ด ์์์์ ์ซ์ 77๊ณผ ๋ฌธ์์ด 77์ ๋น๊ตํ ๊ฒ์ด๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ์ ํผ์ฐ์ฐ์๊ฐ ๊ฐ์ ๊ฐ์ ๊ฐ๊ณ ์์ง๋ง ๋ค๋ฅธ ํ์ (ํ)์ ๊ฐ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด๊ฒ์ false๋ฅผ ๋ฐํํ ๊ฒ์ด๋ค.
77 === '77'
// false (Number v. String)
์ฌ๊ธฐ ์ถ๊ฐ๋ก 2๊ฐ์ ์์๊ฐ ๋ ์๋ค:
'cat' === 'dog'
// false (Both are Strings, but have different values)
false === 0
// false (Different type and different value)
๋ฉ์ง๋ค! ๋ค์ ํ๋ฒ ์ธ๊ธํ๋ฉด, ์ผ์น ์ฐ์ฐ์(===)์ ๋ํ ์ฃผ์์ ์ ์ฐ๋ฆฌ๊ฐ ๋น๊ตํ๋ ํ์ (ํ)๊ณผ ๊ฐ ๋ชจ๋ ์ผ์นํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
==
์๋ฐ์คํฌ๋ฆฝํธ์์ ==๋ฅผ ์ฌ์ฉํ๋ฉด ๋์จํ ๋๋ฑ์ฑ์ ๋ํด์ ํ์ธํ๋ ๊ฒ์ด๋ค. ==๋ ๊ฐ์ ํ ๋ณํ๋ ์ํํ๋ค.
๊ฐ์ ํ ๋ณํ์ ์๋ฏธ๋ ๋ ๊ฐ์ ๊ณตํต ์ ํ์ผ๋ก์ ๋ณํ์ ์๋ํ ํ์๋ง ๊ฐ์ ๋น๊ตํ๋ ๊ฒ์ด๋ค.
์์๊ฐ ์ด ์ ์ ์ค๋ช ํด์ค ๊ฒ์ด๋ค. ์๋์ ์์์ ๋ํด ์์์ ์๊ฒฉํ ๋๋ฑ์ผ๋ก ๋น๊ตํ์ ๋๋ฅผ ๋ ์ฌ๋ ค๋ณด๋ผ:
77 === '77'
// false (Number v. String)
77์ '77'๊ณผ ๋ค๋ฅธ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ์์ ํ ๋๋ฑํ์ง๋ ์๋ค. ํ์ง๋ง ์ด ๊ฐ๋ค์ ๋์จํ ๋๋ฑ์ฑ์ผ๋ก ๋น๊ตํด๋ณด๋ฉด...
77 == '77'
// true
true์์ ์ ์ ์๋ค. ์ด๊ฒ์ ๊ฐ์ ํ ๋ณํ ๋๋ฌธ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ค์ ๋ก ์ฐ๋ฆฌ์ ๊ฐ๋ค์ ๋น์ทํ ์ ํ์ผ๋ก ๋ณํํ๋ ค๊ณ ์๋ํ๋ค. ์ด ๊ฒฝ์ฐ์ ๊ทธ ์๋๋ ์ฑ๊ณตํ๋ค. ๋ฌธ์์ด '77'์ ์ฝ๊ฒ ์ซ์ 77๋ก ๋ณํ๋์๋ค. 77์ 77๊ณผ ๊ฐ๊ธฐ ๋๋ฌธ์ true๊ฐ ๋์จ ๊ฒ์ด๋ค.
์์๋ฅผ ํ๋ ๋ ์ดํด๋ณด์.
์์์ false์ 0์ด ๊ฐ์์ง ์๊ฒฉํ ๋๋ฑ์ผ๋ก ๋น๊ตํ ๊ฒ์ ๋ ์ฌ๋ ค๋ณด์:
false === 0
// false (Different type and different value)
์ด๊ฒ์ ๋ช ๋ฐฑํ false์ด๋ค. ํ์ง๋ง ๊ฐ์ ์์ ๋์จํ ๋๋ฑ์ฑ ๋น๊ต๋ก ๋๋ ค๋ณด๋ฉด...
false == 0
// true
true๋ฅผ ๋ฐ์๋ค? ์ ๊ทธ๋ด๊น? ์ด๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ์ falsy ๊ฐ(๐ค: Boolean ์ปจํ ์คํธ์์ false๋ก ํ๊ฐ๋๋ ๊ฐ)๊ณผ ๊ด๋ จ ์๋ค. ๋ค์ ๋ถ๋ถ์์ ์ด ๊ฐ๋ ๊ณผ ๊ด๋ จํด์ ์์๋ณผ ๊ฒ์ด๋ค.
Falsy(๊ฑฐ์ง ๊ฐ์) ๊ฐ
์ข๋ค, ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ false == 0 ์ธ๊ฐ? ๋ณต์กํ๋ค. ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์์ 0์ falsy ๊ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ฐ์ ํ ๋ณํ์ ์ค์ ๋ก 0์ boolean false๋ก ๋ณํํ๊ณ , false์ false๋ ๋์ผํด์ง๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ฃผ์ํด์ผ ํ 6๊ฐ์ง fasly ๊ฐ์ด ์๋ค:
- false - boolean false
- 0 - ์ซ์ zero
- "" - ๋น ๋ฌธ์์ด
- null
- undefined
- NaN - Not A Number ์ซ์๊ฐ ์๋
Falsy(๊ฑฐ์ง ๊ฐ์) ๊ฐ ๋น๊ต
์๋์ ๋ด์ฉ์ falsy ๊ฐ์ ๊ท์น์ด๋ผ๊ณ ๋ด๋ ๋๋ค. ์ด ๊ท์น๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์์ฃผ ์ฌ์ฉํ ๊ฒ์ด๋ผ๋ฉด ๊ฒฐ๊ตญ์ ์๊ธฐํด์ผ ํ๋ ๊ฒ๋ค์ด๋ค.
1. false, 0, ๊ทธ๋ฆฌ๊ณ ""
์์ ์ธ ๊ฐ์ง falsy ๊ฐ ์ค ์ด๋ ๊ฒ์ด๋ ๋์จํ ๋๋ฑ์ ์ฌ์ฉํ์ฌ ๋น๊ตํ๋ฉด ํญ์ ๊ฐ์ ๊ฒ์ด๋ค. ๊ทธ ์ด์ ๋ ์ด ๊ฐ๋ค์ด ๋ชจ๋ boolean false๋ก ๊ฐ์ ํ ๋ณํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
false == 0
// true
0 == ""
// true
"" == false
// true
2. null๊ณผ undefined
null๊ณผ undefined๋ฅผ ๋น๊ตํ ๋ ์ด๋ค๋ผ๋ฆฌ๋ ์๋ก์ ๋ํด์๋ง ๊ฐ๋ค:
null == null
// true
undefined == undefined
// true
null == undefined
// true
null๊ณผ ๋ค๋ฅธ ๊ฐ์ ๋น๊ตํ๋ ค๊ณ ํ๋ค๋ฉด, false๋ฅผ ๋ฐํํ ๊ฒ์ด๋ค.
3. NaN
๋ง์ง๋ง์ผ๋ก NaN์ ๋ค๋ฅธ ์ด๋ค ๊ฒ๊ณผ๋ ๊ฐ์ง ์๋ค. ์ฌ์ง์ด NaN๋ผ๋ฆฌ ๋น๊ตํด๋ ๊ฐ์ง ์๋ค.
NaN == null
// false
NaN == undefined
// false
NaN == NaN
// false
์ฃผ์์
- ์ดํด๋ณธ ๊ฒ๊ณผ ๊ฐ์ด, ๊ฐ์ ํ ๋ณํ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ข ์ ์ ์ ์ด ์๋ ์ ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์ ๋งค์ฐ ์น์ํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ ๋์จํ ๋๋ฑ(==)์ ๊ทธ ๊ฐ์น๋ณด๋ค ๋ ๋ง์ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ก ์ด์ด์ง ์ ์๋ค.
์ฌ์ฏ ๊ฐ์ง falsy ๊ฐ๊ณผ ๊ทธ๋ค๊ณผ ๊ด๋ จ๋ ๊ท์น๋ค์ ๊ธฐ์ตํ๋ฉด ๋์จํ ๋๋ฑ์ ์ดํดํ๋๋ฐ ๋์์ด ๋ ๊ฒ์ด๋ค. - === ์ฐ์ฐ์๋ ==๋ณด๋ค ๋ ๋ฐ์ด๋๋ค. ๊ฐ๋ฅํ ํ ์ธ์ ๋ ๋์ผํ์ง๋ฅผ ๋น๊ตํ ๋ ===๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ํ์ (ํ)๊ณผ ๊ฐ ๋ชจ๋ ๋น๊ตํจ์ผ๋ก ํญ์ ์ง์ง ์ผ์นํ๋์ง์ ๋ํ ํ ์คํธ๋ฅผ ์คํํ ์ ์๋ค.