๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Dive ๋์์ 21์ฅ์ ์ ๋ฆฌํ์์ต๋๋ค.
์์ฑ์ ํจ์ ๊ฐ์ฒด์ธ ํ์ค ๋นํธ์ธ ๊ฐ์ฒด๋ ํ๋กํ ํ์ ๋ฉ์๋์ ์ ์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ๊ณ ์์ฑ์ ํจ์ ๊ฐ์ฒด ์๋ ํ์ค ๋นํธ์ธ ๊ฐ์ฒด๋ ์ ์ ๋ฉ์๋๋ง ์ ๊ณตํ๋ค.
ํ์ค ๊ฐ์ฒด์ธ String, Number, Boolean, Function, Array, Date๋ ์์ฑ์ ํจ์๋ก ํธ์ถํ์ฌ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค.
const strObj = new String('lee'); // String {"lee"}
// String ์์ฑ์ ํจ์๋ฅผ ํตํด ์์ฑํ strObj ๊ฐ์ฒด์ ํ๋กํ ํ์
์ String.prototype์ด๋ค.
console.log(Object.getPrototypeOf(strObj) === String.prototype); // true
๋ฌธ์์ด์ด๋ ์ซ์, ๋ถ๋ฆฌ์ธ ๋ฑ์ ์์๊ฐ์ด ์๋๋ฐ๋ ๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ String, Number, Boolean ๋ฑ์ ํ์ค ๋นํธ์ธ ์์ฑ์ ํจ์๊ฐ ์กด์ฌํ๋ ์ด์ ๋?
์ด๋ ์์๊ฐ์ ๋ํด ๋ง์น ๊ฐ์ฒด์ฒ๋ผ ๋ง์นจํ ํ๊ธฐ๋ฒ์ผ๋ก ์ ๊ทผํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ผ์์ ์ผ๋ก ์์๊ฐ์ ์ฐ๊ด๋ ๊ฐ์ฒด๋ก ๋ณํํด ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๊ฒ ๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ ๊ฐ์ ๋ํด ๊ฐ์ฒด์ฒ๋ผ ์ ๊ทผํ๋ฉด ์์ฑ๋๋ ์์ ๊ฐ์ฒด๋ฅผ ๋ํผ ๊ฐ์ฒด๋ผ๊ณ ํ๋ค.
์ ์ญ ๊ฐ์ฒด๋ ์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ด์ ๋จ๊ณ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ํด ์ด๋ค ๊ฐ์ฒด๋ณด๋ค๋ ๋จผ์ ์์ฑ๋๋ ํน์ํ ๊ฐ์ฒด์ด๋ฉฐ, ์ด๋ค ๊ฐ์ฒด์๋ ์ํ์ง ์์ ๋ชจ๋ ๋นํธ์ธ ๊ฐ์ฒด์ ์ต์์ ๊ฐ์ฒด๋ค.
var ํค์๋๋ก ์ ์ธํ ์ ์ญ๋ณ์์ ์ ์ธํ์ง ์์ ๋ณ์์ ๊ฐ์ ํ ๋นํ ์๋ฌต์ ์ ์ญ, ๊ทธ๋ฆฌ๊ณ ์ ์ญ ํจ์๋ ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ๋๋ค.
์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์๋ฏธํ๋ค.
Infinity
๋ฌดํ๋๋ฅผ ๋ํ๋ด๋ ์ซ์๊ฐ Infinity๋ฅผ ๊ฐ๋๋ค.
console.log(window.Infinity === Infinity); // true
console.log(3/0); // Infinity
console.log(-3/0); // -Infinity
console.log(typeof Infinity); //number
NaN
(Not-a-Number)์ ๋ํ๋ด๋ ์ซ์๊ฐ NaN์ ๊ฐ๊ณ NaN ํ๋กํผํฐ๋ Number.NaN ํ๋กํผํฐ์ ๊ฐ๋ค.
undefined
์์ ํ์
undefined๋ฅผ ๊ฐ์ผ๋ก ๊ฐ๋๋ค.
console.log(window.undefined); //undefined
์ ํ๋ฆฌ์ผ์ด์ ์ ์ญ์์ ํธ์ถํ ์ ์๋ ๋นํธ์ธ ํจ์๋ก์ ์ ์ญ ๊ฐ์ฒด์ ๋ฉ์๋๋ค.
eval
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด์ ์ธ์๋ก ์ ๋ฌ๋ฐ๋๋ค.
-> ์์ ์ด ํธ์ถ๋ ์์น์ ํด๋นํ๋ ๊ธฐ์กด์ ์ค์ฝํ๋ฅผ ๋ฐํ์์ ๋์ ์ผ๋ก ์ํํ๋ค.
-> ๋จ, strict mode์์๋ eval ํจ์๋ ๊ธฐ์กด์ ์ค์ฝํ๋ฅผ ์์ ํ์ง ์๊ณ eval ํจ์ ์์ ์ ์์ฒด์ ์ธ ์ค์ฝํ๋ฅผ ์์ฑํ๋ค.
-> ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ฌธ์์ด ์ฝ๋๊ฐ let, const ํค์๋๋ฅผ ์ฌ์ฉํ ๋ณ์ ์ ์ธ๋ฌธ์ด๋ผ๋ฉด ์๋ฌต์ ์ผ๋ก strict mode๊ฐ ์ ์ฉ๋๋ค.
-> eval ํจ์์ ์ฌ์ฉ์ ๊ธ์งํด์ผ ํ๋ค.
isFinite
์ ๋ฌ๋ฐ์ ์ธ์๊ฐ ์ ์์ ์ธ ์ ํ์์ด๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๋ฌดํ์์ด๋ฉด false๋ฅผ ๋ฐํํ๋ค.
isNaN
์ ๋ฌ๋ฐ์ ์ธ์๊ฐ NaN์ธ์ง ๊ฒ์ฌํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ฆฌ์ธ ํ์
์ผ๋ก ๋ฐํํ๋ค. ์ ๋ฌ๋ฐ์ ์ธ์์ ํ์
์ด ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ซ์๋ก ํ์
์ ๋ณํํ ํ ๊ฒ์ฌ๋ฅผ ์ํํ๋ค.
parseFloat
์ ๋ฌ๋ฐ์ ๋ฌธ์์ด ์ธ์๋ฅผ ๋ถ๋ ์์์ , ์ฆ ์ค์๋ก ํด์ํ์ฌ ๋ฐํํ๋ค.
parseInt
์ ๋ฌ๋ฐ์ ๋ฌธ์์ด ์ธ์๋ฅผ ์ ์๋ก ํด์ํ์ฌ ๋ฐํํ๋ค.
encodeURI
์์ ํ URI๋ฅผ ๋ฌธ์์ด๋ก ์ ๋ฌ๋ฐ์ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ๋ฅผ ์ํด ์ธ์ฝ๋ฉํ๋ค.
decodeURI
์ธ์ฝ๋ฉ๋ URI๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ด์ค์ผ์ดํ ์ฒ๋ฆฌ ์ด์ ์ผ๋ก ๋์ฝ๋ฉํ๋ค.
encodeURIComponent / decodeURIComponent
encodeURIComponent๋ URI ๊ตฌ์ฑ ์์๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ธ์ฝ๋ฉํ๋ค. ๋ฐ๋ผ์ ์ฟผ๋ฆฌ ์คํธ๋ง ๊ตฌ๋ถ์๋ก ์ฌ์ฉ๋๋ =, ?, &๊น์ง ์ธ์ฝ๋ฉํ๋ค. decodeURIComponent๋ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ URI ๊ตฌ์ฑ ์์๋ฅผ ๋์ฝ๋ฉํ๋ค.
Ref
- ์ด์ ๋ชจ ์ , โ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ Deep Diveโ, ์ํค๋ถ์ค