๐ง JavaScript Type Coercion โ ๊ฐ๋ฅด์น๋ ์ง๋ฌธ
Source: Dev.to
์๋ฐ์คํฌ๋ฆฝํธ ํํ์ ์ค์ ๋ณด๊ธฐ์ ํ๋ ค ๋ณด์ด์ง๋ง 100โฏ% ์ ํจํ ๊ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค ๐
[] == ![]
์ฒซ๋์ ๋๋ถ๋ถ์ ์ด ๊ฒฐ๊ณผ๊ฐ false์ผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๐โฏํ์ง๋ง ์ค์ ๊ฒฐ๊ณผ๋ true์
๋๋ค.
Stepโฏ1: ๋ ผ๋ฆฌ NOT ํ๊ฐ
![]
[]๋ ๊ฐ์ฒด์ ๋๋ค.- ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋ ๊ฐ์ฒด๋ truthyํฉ๋๋ค.
- truthy ๊ฐ์
!๋ฅผ ์ ์ฉํ๋ฉดfalse๊ฐ ๋ฉ๋๋ค.
์ด์ ์์ ๋ค์๊ณผ ๊ฐ์ด ๋ฉ๋๋ค:
[] == false
Stepโฏ2: ๋์จํ ๋๋ฑ ์ฐ์ฐ์(==)๊ฐ ํ์
๊ฐ์ ๋ณํ์ ์ผ์ผํด
==์ ํผ์ฐ์ฐ์ ์ค ํ๋๊ฐ Boolean์ด๋ฉด, ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋จผ์ Boolean์ Number๋ก ๋ณํํฉ๋๋ค:
false โ 0(๊ทธ๋ฆฌ๊ณtrue โ 1).
๋ฐ๋ผ์ ๋น๊ต๋ ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๋๋๋ค:
[] == 0
Stepโฏ3: ๊ฐ์ฒดโ์์๊ฐ ๋ณํ
๊ฐ์ฒด์ ์์๊ฐ์ ==๋ก ๋น๊ตํ ๋๋ default ํํธ๊ฐ ์ฌ์ฉ๋๋ฉฐ, ์ด๋ โNumberโ ๋ณํ ์์๋ฅผ ๋ฐ๋ฆ
๋๋ค:
- ๋จผ์
valueOf()๊ฐ ํธ์ถ๋ฉ๋๋ค(๋ฐฐ์ด์ ๊ฒฝ์ฐ ์์ ์ ๋ฐํ). - ์์๊ฐ์ด ์ป์ด์ง์ง ์์ผ๋ฉด
toString()์ด ํธ์ถ๋ฉ๋๋ค.
[].toString() // ""
์ด์ ๋น๊ต๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
"" == 0
Stepโฏ4: ์ต์ข ๊ฐ์ ๋ณํ
๋ฌธ์์ดโ์ซ์ ๋น๊ต์์๋ ๋ฌธ์์ด์ด ์ซ์๋ก ๋ณํ๋ฉ๋๋ค:
Number("") โ 0
๋ฐ๋ผ์ ์ต์ข ๋น๊ต๋:
0 == 0 // true
โ
๊ฒฐ๊ณผ: true
๐ ํต์ฌ ์ ๋ฆฌ
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ์๊ฒฉํ๊ณ ๊ฒฐ์ ์ ์ธ ๊ฐ์ ๋ณํ ๊ท์น์ ๋ฐ๋ฆ ๋๋ค.
==๋ ์์์ ๋ณํ์ ํ์ฉํ๋ฏ๋ก ๋๋ผ์ด ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ์ ์์ต๋๋ค.- ๋ฐฐ์ด์ ๋ฌธ์์ด๋ก ๋ณํ๋ฉ๋๋ค (
[] โ ""). - Boolean์ ์ซ์๋ก ๋ณํ๋ฉ๋๋ค (
false โ 0,true โ 1). - ๊ท์น์ ์๋ฉด ์ด๋ฐ ๋์์ ์์ธกํ ์ ์์ต๋๋ค.
- ์ค์ ํ๋ก๋์
์ฝ๋์์๋
===(์๊ฒฉ ๋๋ฑ) ์ฌ์ฉ์ ๊ถ์ฅํฉ๋๋ค.
+ ์ฐ์ฐ์๋ฅผ ์ด์ฉํ ํ์
๊ฐ์ ๋ณํ
์ฌ๋กโฏ1: [] + 1
๊ฒฐ๊ณผ: "1"
+๋ ์ซ์ ๋ง์ ๋๋ ๋ฌธ์์ด ์ฐ๊ฒฐ์ ์๋ฏธํ ์ ์์ต๋๋ค.- ํผ์ฐ์ฐ์ ์ค ํ๋๊ฐ ๋ฌธ์์ด์ด ๋๋ฉด ๋ฌธ์์ด ์ฐ๊ฒฐ์ด ์ฐ์ ํฉ๋๋ค.
[] โ ""(๋น ๋ฌธ์์ด).
"" + 1 // "1"
- ์ฐ์ฐ์๋ฅผ ์ด์ฉํ ํ์
๊ฐ์ ๋ณํ
์ฌ๋กโฏ2: [] - 1
๊ฒฐ๊ณผ: -1
-๋ ์ซ์ ์ฐ์ฐ ์ ์ฉ์ด๋ฏ๋ก ์์ชฝ ๋ชจ๋ ์ซ์๋ก ๊ฐ์ ๋ณํ๋ฉ๋๋ค.[] โ "" โ 0.
0 - 1 // -1
๐ ๋์ ๊ณผ์ (๊ฐ์ฒด ๋น๊ต)
์ด์ ๋ฐฐ์ด์ ๋ํ ์ดํด๋ฅผ ๋ฐํ์ผ๋ก ์ผ๋ฐ ๊ฐ์ฒด์ ๋ํด ๋ค์์ ์๋ํด ๋ณด์ธ์:
{} == !{}
{} - 1
{} + 1
์ถ๋ ฅ์ ์ด๋ป๊ฒ ๋ ๊น์ โ ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ด์ ๋ ๋ฌด์์ผ๊น์?