์๋ฐ ์คํฌ๋ฆฝํธ๋ Object, String, Number, Boolean, Symbol, Date, Math, RegExp, Array, Map/Sat, WeakMap/WeakSet, Function, Promise, Reflect, Proxy, JSON, Error ๋ฑ 40์ฌ ๊ฐ์ ํ์ค ๋นํธ์ธ ๊ฐ์ฒด๋ฅผ ์ ๊ณตํ๋ค.
tring, Number, Boolean,Function, Array, Date๋ ์์ฑ์ ํจ์๋ก ํธ์ถํ์ฌ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค.
์์๊ฐ์ ๊ฐ์ฒด์ฒ๋ผ ์ฌ์ฉํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์๋ฌต์ ์ผ๋ก ์ฐ๊ด๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ์์ฑ๋ ๊ฐ์ฒด๋ก ํ๋กํผํฐ์ ์ ๊ทผํ๊ฑฐ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ๋ค์ ์์๊ฐ์ผ๋ก ๋๋๋ฆฐ๋ค.
๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ ๊ฐ์ ๋ํด ๊ฐ์ฒด์ฒ๋ผ ์ ๊ทผํ๋ฉด ์์ฑ๋๋ ์์ ๊ฐ์ฒด๋ฅผ ๋ํผ ๊ฐ์ฒด๋ผ ํ๋ค.
const str = 'hi';
// ์์ ํ์
์ธ ๋ฌธ์์ด์ด ๋ํผ ๊ฐ์ฒด์ธ String ์ธ์คํด์ค๋ก ๋ณํ๋๋ค.
console.log(str.length); // 2
console.log(str.toUpperCase()); // HI
// ๋ํผ ๊ฐ์ฒด๋ก ํ๋กํผํฐ์ ์ ๊ทผํ๊ฑฐ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ํ, ๋ค์ ์์๊ฐ์ผ๋ก ๋๋๋ฆฐ๋ค.
console.log(typeof str); // string
๋ฌธ์์ด ๋ํผ ๊ฐ์ฒด์ธ String ์์ฑ์ ํจ์์ ์ธ์คํด์ค๋ String.prototype์ ๋ฉ์๋๋ฅผ ์์๋ฐ์ ์ฌ์ฉํ ์ ์๋ค.
๊ทธ ํ ๋ํผ ๊ฐ์ฒด์ ์ฒ๋ฆฌ๊ฐ ์ข
๋ฃ๋๋ฉด ๋ํผ ๊ฐ์ฒด์ [[StringData]] ๋ด๋ถ ์ฌ๋กฏ์ ํ ๋น๋ ์์๊ฐ์ผ๋ก ์๋์ ์ํ, ์ฆ ์๋ณ์๊ฐ ์์๊ฐ์ ๊ฐ๋๋ก ๋๋๋ฆฌ๊ณ ๋ํผ ๊ฐ์ฒด๋ ๊ฐ๋น์ง ์ปฌ๋ ์
์ ๋์์ด ๋๋ค.
์ ์ญ ๊ฐ์ฒด์ ํน์ง
๋นํธ์ธ ์ ์ญ ํ๋กํผํฐ๋ ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ์๋ฏธํ๋ค. ์ฃผ๋ก ์ ํ๋ฆฌ์ผ์ด์
์ ์ญ์์ ์ฌ์ฉํ๋ ๊ฐ์ ์ ๊ณตํ๋ค.
Infinity
// ์ ์ญ ํ๋กํผํฐ๋ window๋ฅผ ์๋ตํ๊ณ ์ฐธ์กฐํ ์ ์๋ค.
console.log(window.Infinity = Infinity); // true
// ์์ ๋ฌดํ๋
console.log(3/0); // Infinity
// ์์ ๋ฌดํ๋
console.log(-3/0); // -Infinity
// Infinity๋ ์ซ์๊ฐ์ด๋ค.
console.log(typeof Infinity); // number
NaN
console.log(window.NaN); // NaN
console.log(Number('xyz')); // NaN
console.log(1 * 'string'); // NaN
console.log(typeof NaN); // number
undefined
console.log(window.undefined); // undefined
var foo;
console.log(foo); // undefined
console.log(typeof undefined); // undefined
eval
์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋ํ๋ด๋ ๋ฌธ์์ด์ ์ธ์๋ก ์ ๋ฌ๋ฐ์
// ํํ์์ธ ๋ฌธ
eval('1 + 2;'); // 3
// ํํ์์ด ์๋ ๋ฌธ
eval('var x = 5;'); // undefined
// eval ํจ์์ ์ํด ๋ฐํ์์ ๋ณ์ ์ ์ธ๋ฌธ์ด ์คํ๋์ด x ๋ณ์๊ฐ ์ ์ธ๋์๋ค.
console.log(x); // 5
// ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ๋ฐ๋์ ๊ดํธ๋ก ๋๋ฌ์ผ๋ค.
const o = eval('({a:1})');
console.log(o); // {a: 1}
// ํจ์ ๋ฆฌํฐ๋ด์ ๋ฐ๋์ ๊ดํธ๋ก ๋๋ฌ์ผ๋ค.
const f = eval('(function() { return 1; })');
console.log(f()); // 1
eval ํจ์๋ ์์ ์ด ํธ์ถ๋ ์์น์ ํด๋นํ๋ ๊ธฐ์กด์ ์ค์ฝํ๋ฅผ ๋ฐํ์์ ๋์ ์ผ๋ก ์์ .
isFinite
์ ๋ฌ๋ฐ์ ์ธ์๊ฐ ์ ์์ ์ธ ์ ํ์์ธ์ง ๊ฒ์ฌํ์ฌ ์ ํ์์ด๋ฉด true๋ฅผ ๋ฐํ, ๋ฌดํ์์ด๋ฉด false๋ฅผ ๋ฐํํ๋ค ์ ๋ฌ๋ฐ์ ์ธ์์ ํ์ ์ด ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ, ์ซ์๋ก ํ์ ์ ๋ณํํ ํ ๊ฒ์ฌ ์ธ์๊ฐ NaN์ผ๋ก ํ๊ฐ๋๋ ๊ฐ์ด๋ผ๋ฉด false๋ฅผ ๋ฐํ
// ์ธ์๊ฐ ์ ํ์์ด๋ฉด true๋ฅผ ๋ฐํํ๋ค.
isFinite(0); // true
isFinite(2e64); // true
isFinite('10'); // true: '10' = 10
isFinite(null) // true: null 0
// ์ธ์๊ฐ ๋ฌดํ์ ๋๋ NaN์ผ๋ก ํ๊ฐ๋๋ ๊ฐ์ด๋ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค.
isFinite(Infinity); // false
isFinite(-Infinity); // false
// ์ธ์๊ฐ NaN์ผ๋ก ํ๊ฐ๋๋ ๊ฐ์ด๋ผ๋ฉด false๋ฅผ ๋ฐํํ๋ค.
isFinite(NaN); // false
isFinite('Hello'); // false
isFinite('2005/12/12'); // fale
isNaN
์ ๋ฌ๋ฐ์ ์ธ์๊ฐ NaN์ธ์ง ๊ฒ์ฌํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ฆฌ์ธ ํ์
์ผ๋ก ๋ฐํ. ์ ๋ฌ๋ฐ์ ์ธ์์ ํ์
์ด ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ซ์๋ก ํ์
๋ณํ ํ ๊ฒ์ฌ.
// ์ซ์
isNaN(NaN); // true
isNaN(10); // false
// ๋ฌธ์์ด
isNaN('blabla'); // true: 'blabla' => NaN
isNaN('10'); // true: '10' => 10
isNaN('10.12'); // true: '10.12' => 10.12
isNaN(''); // true: '' => 0
isNaN(' '); // true: ' ' => 0
// ๋ถ๋ฆฌ์ธ
isNaN(true); // false: true > 1
isNaN(false); // false: null > 0
// undefined
isNaN(undefined); // true: undefined => NaN
// ๊ฐ์ฒด
isNaN({}); // true: {} => NaN
// date
isNaN(new Date()); // false: new Date() => number
isNaN(new Date().toString()); // true: String => NaN
parseFloat
์ ๋ฌ๋ฐ์ ๋ฌธ์์ด ์ธ์๋ฅผ ๋ถ๋ ์์์ ์ซ์, ์ฆ ์ค์๋ก ํด์ํ์ฌ ๋ฐํ
// ๋ฌธ์์ด์ ์ค์๋ก ํด์ํ์ฌ ๋ฐํํ๋ค.
parseFloat('3.14'); // 3.14
parseFloat('10.00'); // 10
// ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋ ๋ฌธ์์ด์ ์ฒซ ๋ฒ์จฐ ๋ฌธ์์ด๋ง ๋ณํํ๋ค.
parseFloat('34 45 66'); // 34
parseFloat('40 years'); // 40
// ์ฒซ ๋ฒ์งธ ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํํ ์ ์๋ค๋ฉด NaN์ ๋ฐํํ๋ค.
parseFloat('He was 40'); // NaN
// ์๋ค ๊ณต๋ฐฑ์ ๋ฌด์๋๋ค
parseFloat(' 60 '); // 60
parseInt
์ ๋ฌ๋ฐ์ ๋ฌธ์์ด ์ธ์๋ฅผ ์ ์๋ก ํด์ํ์ฌ ๋ฐํ
// ๋ฌธ์์ด์ ์ ์๋ก ํด์ํ์ฌ ๋ฐํํ๋ค.
parseInt('10'); // 10
parseInt('10.123'); // 10
encodeURI / decodeURI
encodeURIComponent ํจ์๋ URI ๊ตฌ์ฑ ์์๋ฅผ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ์ธ์ฝ๋ฉํ๋ค. ์ธ์๋ก ์ ๋ฌ๋ ๋ฌธ์์ด์ ์ฟผ๋ฆฌ ์คํธ๋ง์ ์ผ๋ถ๋ก ๊ฐ์ฃผํ์ฌ, ์ฟผ๋ฆฌ์คํธ๋ง ๊ตฌ๋ถ์๋ก ์ฌ์ฉ๋๋ =, ?, & ๊น์ง ์ธ์ฝ๋ฉํ๋ค.
๋ฐ๋ฉด encodeURI ํจ์๋ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ ๋ฌธ์์ด์ ์์ ํ URI ์ ์ฒด๋ผ๊ณ ๊ฐ์ฃผํด ์ฟผ๋ฆฌ ์คํธ๋ง ๊ตฌ๋ถ์๋ ์ธ์ฝ๋ฉํ์ง ์๋๋ค.
decodeURIComponent ํจ์๋ ๋งค๊ฐ๋ณ์ ์ ๋ฌ๋ URI ๊ตฌ์ฑ ์์๋ฅผ ๋์ฝ๋ฉํ๋ค.
var x = 10; // ์ ์ญ ๋ณ์
function foo () {
//์ ์ธํ์ง ์์ ์๋ณ์์ ๊ฐ์ ํ ๋น
y = 20; //window.y = 20;
}
foo();
//์ ์ธํ์ง ์์ ์๋ณ์ y๋ฅผ ์ ์ญ์์ ์ฐธ์กฐํ ์ ์๋ค.
console.log(x + y); // 30
foo ํจ์๊ฐ ํธ์ถ๋๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ y ๋ณ์์ ๊ฐ์ ํ ๋คํ๊ธฐ ์ํด ๋จผ์ ์ค์ฝํ ์ฒด์ธ์ ํตํด ์ ์ธ๋ ๋ณ์์ธ์ง ํ์ธํ๋ค. ์ด๋ foo ํจ์์ ์ค์ฝํ์ ์ ์ญ ์ค์ฝํ ์ด๋์์๋ y ๋ณ์์ ์ ์ธ์ ์ฐพ์ ์ ์์ผ๋ฏ๋ก ์ฐธ์กฐ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ y = 20์ window.y = 20์ผ๋ก ํด์ํ์ฌ ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๋ฅผ ๋์ ์์ฑํ๋ค. ๊ฒฐ๊ตญ y๋ ์ ์ญ ๊ฐ์ฒด์ ํ๋กํผํฐ๊ฐ ๋์ด ๋ง์น ์ ์ญ ๋ณ์์ฒ๋ผ ๋์ํ๋ค. ์ด๋ฌํ ํ์์ ์๋ฌต์ ์ ์ญ์ด๋ผ ํ๋ค.