๐ Chapter 2 : ๊ฐ
Table of Contents
๐ฏ ๋ฐฐ์ดโ
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด์ ํ์ ์ด ์๊ฒฉํ ๋ค๋ฅธ ์ธ์ด์ ๋ฌ๋ฆฌ ๋ฌธ์์ด, ์ซ์, ๊ฐ์ฒด ์ฌ์ง์ด ๋ค๋ฅธ ๋ฐฐ์ด์ด๋ ์ด๋ค ํ์ ์ ๊ฐ์ด๋ผ๋ ๋ด์ ์ ์๋ ๊ทธ๋ฆ์ด๋ค.
var a = [1, "2", [3]];
a.length; // 3
a[0] === 1; // true
a[2][0] === 3; // true
- ๋ฐฐ์ด ํฌ๊ธฐ๋ ๋ฏธ๋ฆฌ ์ ํ์ง ์๊ณ ๋ ์ ์ธํ ์ ์์ผ๋ฉฐ ์ํ๋ ๊ฐ์ ์ถ๊ฐํ๋ฉด ๋๋ค.
var a = [];
a.length; // 0
a[0] = 1;
a[1] = "2";
a[2] = [3];
a.length; // 3
- ๋น ์ฌ๋กฏ์ด ์๋ ๋ฐฐ์ด์ ๋ค๋ฃฐ ๋๋ ์กฐ์ฌํด์ผ ํ๋ค.
var a = [];
a[0] = 1;
// a[1]์ด ๋น ์ง
a[2] = [3];
a.length; // 3
- ์คํ์ ๋์ง๋ง ์ด๋ฐ ์ฝ๋์์ ์ค๊ฐ์ ๊ฑด๋๋ด ๋น ์ฌ๋กฏ์ ํผ๋์ ์ค ์ ์๋ค.
- ์ ์์ ์์
a[1]
์ฌ๋กฏ ๊ฐ์undefinded
๊ฐ ๋ ๊ฑฐ ๊ฐ์ง๋ง, ๋ช ์์ ์ผ๋กa[1] = undefined
๋ผ ์ธํ ํ ๊ฒ๊ณผ ๋๊ฐ์ง๋ ์๋ค. - ๋ฐฐ์ด ์ธ๋ฑ์ค๋ ์ซ์์ธ๋ฐ, ๋ฐฐ์ด ์์ฒด๋ ํ๋์ ๊ฐ์ฒด์ฌ์ ํค/ํ๋กํผํฐ ๋ฌธ์์ด์ ์ถ๊ฐํ ์ ์๋ค. (๋ฐฐ์ด
length
๊ฐ ์ฆ๊ฐํ์ง๋ ์๋๋ค.)
var a = [];
a[0] = 1;
a["foobar"] = 2;
a.length; // 1
a["foobar"] // 2
a.foobar; // 2
- ํค๋ก ๋ฃ์ ๋ฌธ์์ด ๊ฐ์ด ํ์ค 10์ง์ ์ซ์๋ก ํ์ ์ด ๋ฐ๋๋ฉด, ๋ง์น ๋ฌธ์์ด ํค๊ฐ ์๋ ์ซ์ ํค๋ฅผ ์ฌ์ฉํ ๊ฑฐ ๊ฐ์ ๊ฒฐ๊ณผ๊ฐ ์ด๋๋๋ค.
var a = [];
a["13"] = 42;
a.length; // 14
๐ ์ ์ฌ ๋ฐฐ์ดโ
- ์ ์ฌ ๋ฐฐ์ด ๊ฐ(์ซ์ ์ธ๋ฑ์ค๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ๋ค์ ์งํฉ)์ ์ง์ง ๋ฐฐ์ด๋ก ๋ฐ๊พธ๊ณ ์ถ์ ๋๊ฐ ์๋ค.
- ์ด๋ด ๋๋ ๋ฐฐ์ด ์ ํธ๋ฆฌํฐ ํจ์(
indexOf()
,forEach()
,concat()
๋ฑ)๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค.
function foo() {
// arguments ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ES6๋ถํฐ ๋น ๊ถ์ฅ
var arr = Array.prototype.slice.call(arguments);
arr.push("bam");
console.log(arr);
}
foo("bar", "baz"); // ["bar", "baz", "bam"]
- ์์ ๊ฐ์ ๋ณํ์
slice()
ํจ์์ ๊ธฐ๋ฅ์ ์ฐจ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ค. - ES6 ๋ถํฐ๋ ๊ธฐ๋ณธ ๋ด์ฅ ํจ์
Array.from()
์ด ์ด ์ผ์ ๋์ ํ๋ค.
var arr = Array.from(arguments);
๐ฏ ๋ฌธ์์ดโ
- ํํ ๋ฌธ์์ด์ ๋จ์ง ๋ฌธ์์ ๋ฐฐ์ด์ด๋ผ๊ณ ์๊ฐํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ์์ด์ ์ค์ ๋ก ์๊น์๋ง ๋น์ทํ ๋ฟ ๋ฌธ์ ๋ฐฐ์ด๊ณผ ๊ฐ์ง ์๋ค.
var a = 'foo';
var b = ['f', 'o', 'o'];
- ๋ฌธ์์ด์ ๋ฐฐ์ด๊ณผ ๊ฒ๋ชจ์ต์ด ๋ฎ์๋ค.(์ ์ฌ ๋ฐฐ์ด์ด๋ค.).
- ๋ ๋ค
length
ํ๋กํผํฐ,indexOf()
๋ฉ์๋(ES5 ๋ฐฐ์ด์๋ง ์์),concat()
๋ฉ์๋๋ฅผ ๊ฐ์ง๋ค
a.length; // 3
b.length; // 3
a.indexOf('o'); // 1
b.indexOf('o'); // 1
var c = a.concat('bar'); // foobar
var d = b.concat(['b', 'a', 'r']); // ['f', 'o', 'o', 'b', 'a', 'r']
a === c; // false
b === d; // false
a; // foo
b; // ['f', 'o', 'o']
- ๊ทธ๋ ๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๋ ๋ค '๋ฌธ์์ ๋ฐฐ์ด'์ด๋ผ๊ณ ํ ์ ์์๊น? ๊ทธ๋ ์ง ์๋ค.
a[i] = '0';
b[i] = '0';
a; // foo
b; // ['f', 'O', 'o']
- ๋ฌธ์์ด์ ๋ถ๋ณ ๊ฐ(
Immutable
) ์ด์ง๋ง ๋ฐฐ์ด์ ๊ฐ๋ณ ๊ฐ(Mutable
) ์ด๋ค. a[1]
์ฒ๋ผ ๋ฌธ์์ด์ ํน์ ๋ฌธ์๋ฅผ ์ ๊ทผํ๋ ํํ๊ฐ ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์ ์ ํจํ ๊ฒ์ ์๋๋ค. ( ์ต์คํ๋ก๋ฌ ๊ตฌ๋ฒ์ ์ ๋ฌธ๋ฒ ์๋ฌ๋ก ์ธ์)- ๋ฌธ์์ด์ ๋ถ๋ณ ๊ฐ์ด๋ฏ๋ก ๋ฌธ์์ด ๋ฉ์๋๋ ๊ทธ ๋ด์ฉ์ ๋ฐ๋ก ๋ณ๊ฒฝํ์ง ์๊ณ ํญ์ ์๋ก์ด ๋ฌธ์์ด์ ์์ฑํ ํ ๋ฐํํ๋ค.
- ๋ฐ๋ฉด์ ๋๋ถ๋ถ์ ๋ฐฐ์ด ๋ฉ์๋๋ ๊ทธ ์๋ฆฌ์์ ๊ณง๋ฐ๋ก ์์๋ฅผ ์์ ํ๋ค.
c = a.toUpperCase();
a === c; //false
a; // foo
c; // FOO
b.push('!');
b; // ['f','O', 'o', '!']
- ๋ฌธ์์ด์ ๋ค๋ฃฐ ๋ ์ ์ฉํ ๋๋ถ๋ถ์ ๋ฐฐ์ด ๋ฉ์๋๋ ์ฌ์ค์ ๋ฌธ์์ด์ ์ธ ์ ์์ง๋ง, ๋ฌธ์์ด์ ๋ํด ๋ถ๋ณ ๋ฐฐ์ด ๋ฉ์๋๋ฅผ ๋น๋ ค ์ธ ์๋ ์๋ค.
a.join; // undefined
a.map; // undefined
var c = Array.prototype.join.call(a, '-');
var d = Array.prototype.map.call(a, function(v) {
return v.toUpperCase() + '.';
}).join('');
c; // "f-o-o"
d; // "F.O.O."
- ๋ฌธ์์ด์ ์์๋ก ๊ฑฐ๊พธ๋ก ๋ค์ง์ ์ ์๋ค.
- ๋ฐฐ์ด์๋
reverse()
๋ผ๋ ๊ฐ๋ณ ๋ฉ์๋๊ฐ ์ค๋น๋์ด ์์ง๋ง, ๋ฌธ์์ด์ ๊ทธ๋ ์ง ์๋ค.
a.reverse; // undefined
b.reverse(); // ["!", "o", "o", "f"]
b; // ["!", "o", "o", "f"]
- ๋ฌธ์์ด์ ๋ถ๋ณ ๊ฐ์ด๋ผ ๋ฐ๋ก ๋ณ๊ฒฝ๋์ง ์์ผ๋ฏ๋ก ๋ฐฐ์ด์ ๊ฐ๋ณ ๋ฉ์๋๋ ํตํ์ง ์๊ณ , ๊ทธ๋์ '๋น๋ ค ์ฐ๋ ๊ฒ' ๋ํ ์ ๋๋ค.
Array.prototype.reverse.call(a);
// Cannot assign to read only property '0' of object '[object String]'
- ๋ฌธ์์ด์ ๋ฐฐ์ด๋ก ๋ฐ๊พธ๊ณ ์ํ๋ ์์ ์ ์ํํ ํ ๋ค์ ๋ฌธ์์ด๋ก ๋๋๋ฆฌ๋ ๊ฒ์ด ๋ ๋ค๋ฅธ ๊ผผ์(Hack)์ด๋ค.
- ํ์ง๋ง ๋ณต์กํ(์ ๋์ฝ๋)๋ฌธ์๊ฐ ์์ฌ ์๋ ๊ฒฝ์ฐ ์ด ๋ฐฉ๋ฒ์ ํตํ์ง ์๋๋ค.
var c = a.split('').reverse().join('');
๐ฏ ์ซ์โ
- ์๋ฐ์คํฌ๋ฆฝํธ์ ์ซ์ ํ์
์
number
๊ฐ ์ ์ผํ๋ฉฐ ์ ์(integer), ๋ถ๋ ์์์ ์ซ์๋ฅผ ๋ชจ๋ ์์ฐ๋ฅธ๋ค. - ๋ฐ๋ผ์ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ ์๋ ๋ถ๋ ์์์ ๊ฐ์ด ์๋ ๊ฐ์ด๋ค.(42.0์ ์ ์ 42์ ๊ฐ๋ค.)
๐ ์ซ์ ๊ตฌ๋ฌธโ
- ์๋ฐ์คํฌ๋ฆฝํธ ์ซ์ ๋ฆฌํฐ๋ด์ ๋ค์๊ณผ ๊ฐ์ด 10์ง์ ๋ฆฌํฐ๋ด๋ก ํ์ํ๋ค.
- ์์์ ์ ์ ์๊ฐ 0์ด๋ฉด ์๋ต ๊ฐ๋ฅํ๋ค.
- ์์์ ์ดํ๊ฐ 0์ผ ๋๋ ์๋ต ๊ฐ๋ฅํ๋ค.
var a = 42;
var b = 42.3;
var a = 0.42;
var b = .42;
var a = 42.0;
var b = 42.;
- ์์ฃผ ํฌ๊ฑฐ๋ ์์ฃผ ์์ ์ซ์๋ ์ง์ํ์ผ๋ก ํ์ํ๋ฉฐ,
toExponential()
๋ฉ์๋์ ๊ฒฐ๊ด๊ฐ๊ณผ ๊ฐ๋ค.
var a = 5E10;
a; // 50000000000
a.toExponential() // "5e+10"
- ์ซ์ ๊ฐ์
Number
๊ฐ์ฒด ๋ํผ(Wrapper)๋ก ๋ฐ์ฑ(Boxing)ํ ์ ์๊ธฐ ๋๋ฌธ์Number.prototype
๋ฉ์๋๋ก ์ ๊ทผํ ์๋ ์๋ค.
var a = 42.59;
a.toFixed(0); // "43"
a.toFixed(1); // "42.6"
a.toFixed(2); // "42.59"
- ์ค์ ๋ก๋ ์ซ์ ๊ฐ์ ๋ฌธ์์ด ํํ๋ก ๋ฐํํ๋ฉฐ, ์๋ ๊ฐ์ ์์์ ์ดํ ์ซ์๋ณด๋ค ๋ ๋ง์ ์๋ฆฟ์๋ฅผ ์ง์ ํ๋ฉด ๊ทธ๋งํผ 0์ด ์ฐ์ธก์ ๋ถ๋๋ค.
- ์์์ ์ผ ๊ฒฝ์ฐ์ ํ๋กํผํฐ ์ ๊ทผ์๊ฐ ์๋ ์ซ์ ๋ฆฌํฐ๋ด์ ์ผ๋ถ๋ก ํด์๋๋ฏ๋ก, ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋๋ ์กฐ์ฌํด์ผ ํ๋ค.
42.toFixed(3); // Uncaught SyntaxError: Invalid or unexpected token
(42).toFixed(3); // "42.000"
0.42.toFixed(3); // "0.420"
42..toFixed(3); // "42.000"
42.toFixed(3);
๊ฐ ๊ตฌ๋ฌธ ์๋ฌ๊ฐ ๋๋ ์ด์ ๋42.
๋ฆฌํฐ๋ด(๋ง๋ ํํ)์ ์ผ๋ถ๊ฐ ๋์ด ๋ฒ๋ ค.toFixed
๋ฉ์๋์ ์ ๊ทผํ ์๋จ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.- ์ซ์ ๋ฆฌํฐ๋ด์ 2์ง, 8์ง, 16์ง ๋ฑ ๋ค๋ฅธ ์ง๋ฒ์ผ๋ก๋ ๋ํ๋ผ ์ ์๋ค.
- ES6+ ์๊ฒฉ ๋ชจ๋(strict mode)์์๋
0363
์ฒ๋ผ0
์ ์์ ๋ถ์ฌ 8์ง์๋ฅผ ํ์ํ์ง ๋ชปํ๋ค.
๐ ์์ ์์ ๊ฐโ
- ๋ค์ ์์ ๋ ์ด์ง ๋ถ๋ ์์์ ์ซ์์ ๋ถ์์ฉ ๋ฌธ์ ์ด๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ง์ ๋ฌธ์ ๊ฐ ์๋๋ผ IEEE 754 ํ์ค์ ๋ฐ๋ฅด๋ ๋ชจ๋ ์ธ์ด์์ ๊ณตํต์ ์ธ ๋ฌธ์ ์ด๋ค.
0.1 + 0.2 === 0.3 // false
- ์ด ๋ฌธ์ ๋ ์ด์ง ๋ถ๋ ์์์ ์ผ๋ก ๋ํ๋ธ
0.1
๊ณผ0.2
๋ ์๋ ์ซ์์ ์ผ์นํ์ง ์๋๋ค. - ๊ทธ๋์ ๋์ ๋ํ ๊ฒฐ๊ณผ ์ญ์ ์ ํํ 0.3์ด ์๋๋ค. ์ค์ ๋ก๋
0.300000000004
์ ๊ฐ๊น์ง๋ง, ๊ฐ๊น๋ค๊ณ ํด๋ ๊ฐ์ ๊ฒ์ ์๋๋ค. - ๋ง์ ์ ํ๋ฆฌ์ผ์ด์ ์ด(๋๋ถ๋ถ) ์ ์ฒด์(0๊ณผ ์์๋ฅผ ํฌํจํ ์ซ์)๋ง์, ๊ทธ๊ฒ๋ ๊ธฐ๊ปํด์ผ ๋ฐฑ๋ง์ด๋ ์กฐ ๋จ์ ๊ท๋ชจ์ ์ซ์๋ฅผ ๋ค๋ฃฌ๋ค.
- ์ด๋ฐ ์ํฉ์ด๋ผ๋ฉด ์์ฌํ๊ณ ์๋ฐ์คํฌ๋ฆฝํธ์ ์ซ์ ์ฐ์ฐ ๊ธฐ๋ฅ์ ๋ฏฟ๊ณ ์จ๋ ๋๋ค.
- ๊ทธ๋ ๋ค๋ฉด
0.1 + 0.2
๊ณผ0.3
, ๋ ์ซ์๋ ๋ฏธ์ธํ ๋ฐ์ฌ๋ฆผ ์ค์ฐจ๋ฅผ ํ์ฉ ๊ณต์ฐจ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค. - ์ด๋ ๊ฒ ๋ฏธ์ธํ ์ค์ฐจ๋ฅผ ๋จธ์ ์
์ค๋ก (์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ ๊ฐ์ฅ ์์ ์ซ์ ๋จ์) ์ด๋ผ๊ณ ํ๋๋ฐ, ์๋ฐ์คํฌ๋ฆฝํธ ์ซ์์ ๋จธ์ ์
์ค๋ก ์
2^-52^
์ด๋ค. - ES6๋ถํฐ๋ ์ด ๊ฐ์ด
Number.EPSILON
์ผ๋ก ๋ฏธ๋ฆฌ ์ ์๋์ด ์์ผ๋ฏ๋ก ํ์์ ์ฌ์ฉํ๋ฉด ๋๊ณ , ES6 ์ด์ ๋ธ๋ผ์ฐ์ ๋ ํด๋ฆฌํ์ ๋์ ์ฌ์ฉํ๋ค.
if(!Number.EPSILON) {
Number.EPSILON = Math.pow(2,-52);
}
Number.EPSILON
์ผ๋ก ๋ ์ซ์์ (๋ฐ์ฌ๋ฆผ ํ์ฉ ์ค์ฐจ ์ด๋ด์) ๋๋ฑํจ์ ๋น๊ตํ ์ ์๋ค.
function numbersCloseEnoughToEqual(n1, n2) {
return Math.abs(n1 - n2) < Number.EPSILON;
}
var a = 0.1 + 0.2;
var b = 0.3;
numbersCloseEnoughToEqual(a, b); // true
numbersCloseEnoughToEqual(0.00000001, 0.00000002); // false
๐ ์ ์์ธ์ง ํ์ธโ
- ES6๋ถํฐ๋
Number.isInteger()
๋ก ์ด๋ค ๊ฐ์ ์ ์ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
Number.isInteger(42); // true
Number.isInteger(42.000); // true
Number.isInteger(42.3); // false
- ์์ ํ ์ ์ ์ฌ๋ถ๋ ES6๋ถํฐ
Number.isSafeInteger()
๋ก ์ฒดํฌํ๋ค.
Number.isSafeInteger(Number.MAX_SAFE_INTEGER); // true
Number.isSafeInteger(Math.pow(2, 53)); // false
Number.isSafeInteger(Math.pow(2, 53) - 1); // true
๐ 32๋นํธ (๋ถํธ ์๋) ์ ์โ
- ์ ์์ ์์ ๋ฒ์๊ฐ ๋๋ต 9์กฐ์ ์ด๋ฅด์ง๋ง, 32๋นํธ ์ซ์์๋ง ๊ฐ๋ฅํ ์ฐ์ฐ์ด ์์ผ๋ฏ๋ก ์ค์ ๋ฒ์๋ ํจ์ฌ ์ค์ด๋ ๋ค.
- ๋ฐ๋ผ์ ์ ์์ ์์ ๋ฒ์๋
Math.pow(-2, 31)
์์Math.pow(2, 31) - 1
๊น์ง์ด๋ค. a | 0
๊ณผ ๊ฐ์ด ์ฐ๋ฉด ์ซ์ ๊ฐ โก 32 ๋นํธ ๋ถํธ ์๋ ์ ์๋ก ๊ฐ์ ๋ณํ์ ํ๋ค.|
๋นํธ ์ฐ์ฐ์๋ 32๋นํธ ์ ์ ๊ฐ์๋ง ์ธ ์ ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ด๋ค.
๐ฏ ํน์ ๊ฐโ
๐ ๊ฐ์ด ์๋ ๊ฐโ
undefinded
ํ์ ์ ๊ฐ์undefinded
๋ฐ์ ์๋ค.null
ํ์ ๋ ๊ฐ์null
๋ฟ์ด๋ค.- ๊ทธ๋์ ์ด ๋์ ํ์ ๊ณผ ๊ฐ์ด ํญ์ ๊ฐ๋ค.
null
์ ์๋ณ์๊ฐ ์๋ ํน๋ณํ ํค์๋์ด๋ฏ๋กnull
์ด๋ผ์ ๋ณ์์ ๋ญ๊ฐ ํ ๋นํ ์๋ ์๋ค.- ๊ทธ๋ ์ง๋ง
undefined
๋ ์๋ณ์๋ก ์ธ ์ ์๋ค.
๐ Undefinedโ
- ๋์จํ ๋ชจ๋์์๋ ์ ์ญ ์ค์ฝํ์์
undefined
๋ ์๋ณ์์ ๊ฐ์ ํ ๋นํ ์ ์๋ค.(์ ๋ ์ถ์ฒ X)
function foo() {
undefined = 2; // ์ข์ง ๋ชปํ๋ค.
}
function foo() {
"use strict";
undefined = 2; // ํ์
์๋ฌ ๋ฐ์
}
- ๋ชจ๋์ ์๊ด์์ด
undefined
๋ ์ด๋ฆ์ ๊ฐ์ง ์ง์ญ ๋ณ์๋ ์์ฑํ ์ ์๋ค. (์ฌ์ฉ X)
function foo() {
"use strict";
var undefined = 2;
console.log(undefined); // 2
}
undefined
๋ ๋ด์ฅ ์๋ณ์๋ก, ๊ฐ์undefined
์ง๋ง, ์ด ๊ฐ์void
์ฐ์ฐ์๋ก๋ ์ป์ ์ ์๋ค.- ํํ์
void __
๋ ์ด๋ค ๊ฐ์ด๋ ๋ฌดํจ๋ก ๋ง๋ค์ด, ํญ์ ๊ฒฐ๊ด๊ฐ์undefined
๋ก ๋ง๋ ๋ค. ๊ธฐ์กด ๊ฐ์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ์ฐ์ฐ ํ ๊ฐ์ ๋ณต๊ตฌํ ์ ์๋ค.
var a = 42;
console.log(void a, a); // undefined 42
- ๊ด๋ก์ ๋ฐ๋ผ
void
๋ง์ผ๋กundefined
๊ฐ์ ๋ํ๋ด๋ ค๋ฉดvoid 0
์ด๋ผ๊ณ ์ด๋ค.void 0
,void 1
,undefined
๋ชจ๋ ๊ฐ๋ค. void
์ฐ์ฐ์๋ ๊ฐ์ด ์กด์ฌํ๋ ๊ณณ์์ ๊ทธ ๊ฐ์ดundefined
๊ฐ ๋์ด์ผ ์ข์ ๊ฒฝ์ฐ์๋ง ์ฌ์ฉํด์ผ ํ๋ค. (๊ฑฐ์ ์ฌ์ฉํ์ง ์๋๋ค.)
๐ ํน์ ์ซ์โ
- ์ซ์ ์ฐ์ฐ ์ ๋ ํผ์ฐ์ฐ์๊ฐ ์ ๋ถ ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ ํจํ ์ซ์๊ฐ ๋์ฌ ์ ์์ผ๋ฏ๋ก ๊ทธ ๊ฒฐ๊ณผ๋
NaN
์ด๋ค. NaN
์ ์ซ์ ์๋๋ณด๋ค๋ ์ ํจํ์ง ์์(invalid) ์ซ์, ์คํจํ ์ซ์, ๋๋ ๋ชน์ธ ์ซ์๋ผ๊ณ ํ๋ ๊ฒ์ด ๋ ์ ํํ๋ค.
var a = 2 / 'foo'; // NaN
typeof a === 'number'; // true
NaN
์ ๊ฒฝ๊ณ ๊ฐ์ ์ผ์ข ์ผ๋ก ์ซ์ ์งํฉ ๋ด์์ ํน๋ณํ ์ข ๋ฅ์ ์๋ฌ ์ํฉ์ ๋ํ๋ธ๋ค.- ์ด๋ค ๋ณ์๊ฐ์ด ํน์ํ ์คํจ ์ซ์, ์ฆ
NaN
์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ๋null
,undefined
์ฒ๋ผNaN
๋ ์ง์ ๋น๊ตํ๊ณ ์ถ์ง๋ง ํ๋ฆฌ๋ค. NaN
์ ๋ค๋ฅธ ์ด๋คNaN
๊ณผ๋ ๋๋ฑํ์ง ์๋ค.- ์ฌ์ค์ ๋ฐ์ฌ์ฑ(Reflexive)์ด ์๋ ์ ์ผ๋ฌด์ดํ ๊ฐ์ด๋ค.
- ๋ฐ๋ผ์
NaN !== NaN
์ด๋ค. NaN
์ ์ฌ๋ถ๋ฅผ ํ์ผ ํ ๋๋ ๋ด์ฅ ์ ์ญ ์ ํธ๋ฆฌํฐisNaN()
ํจ์๊ฐNaN
์ฌ๋ถ๋ฅผ ๋งํด์ค๋ค.- ํ์ง๋ง
isNaN()
๋ ์น๋ช ์ ์ธ ๊ฒฐํจ์ด ์๋๋ฐ ์ด ํจ์๋NaN
์ ์๋ฏธ๋ฅผ ๋๋ฌด ๊ธ์ ๊ทธ๋๋ก๋ง ํด์ํด์ ์ค์ ๋ก ์ธ์ ๊ฐ์ด ์ซ์์ธ์ด ์ฌ๋ถ๋ฅผ ํ๊ฐํ๋ ๊ธฐ๋ฅ์ด ์ ๋ถ์ด๋ค.
var a = 2 / 'foo';
var b = 'foo';
a; // NaN
b; // 'foo'
window.isNaN(a); // true
window.isNaN(b); // true
foo
๋ ๋น์ฐํ ์ซ์๊ฐ ์๋์ง๋ง, ๊ทธ๋ ๋ค๊ณNaN
๋ ์๋๋ค.- ์ด ๋ฒ๊ทธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ ์ดํ ์ค๋๊น์ง ๊ณ์๋๋ค.
- ES6 ๋ถํฐ๋
Number.isNaN()
์ด ๋ฑ์ฅํ์ฌNaN
์ฌ๋ถ๋ฅผ ์์ ํ๊ฒ ์ฒดํฌํ ์ ์๋ค. - ์๋ฐ์คํฌ๋ฆฝํธ์์๋ 0์ผ๋ก ๋๋๊ธฐ ์ฐ์ฐ์ด ์ ์ ์๋์ด ์์ด์ ์๋ฌ ์์ด
Infinity(Number.POSITIVE_INFINITY)
๋ผ๋ ๊ฒฐ๊ณผ๊ฐ์ด ๋์จ๋ค.
var a = 1 / 0; // Infinity
var b = -1 / 0; // Infinity
- IEEE 754 ๋ช ์ธ์ ๋ฐ๋ฅด๋ฉด, ๋ง์ ๋ฑ์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋๋ฌด ์ปค์ ํํํ๊ธฐ ๊ณค๋ํ ๋ ๊ฐ์ฅ ๊ฐ๊น์ด ์๋ก ๋ฐ์ฌ๋ฆผ ๋ชจ๋๊ฐ ๊ฒฐ๊ด๊ฐ์ ์ ํ๋ค.
- ๋ง์ฝ ๋ฌดํ์ ๋ฌดํ์ผ๋ก ๋๋๋ฉด ๋ฌดํ๋๋๋ 1์ด ๋์ฌ๊ฑฐ ๊ฐ์ง๋ง ์ํ์ฑ , ์๋ฐ์คํฌ๋ฆฝํธ ๋ชจ๋ ๋ฌดํ๋/๋ฌดํ๋๋ ์ ์๋์ง ์์ ์ฐ์ฐ์ด๋ฉฐ, ๊ฒฐ๊ด๊ฐ์ NaN์ด๋ค
- ์ ํํ ์์๋ฅผ ๋ฌดํ๋๋ก ๋๋๋ฉด
0
์ด์ง๋ง ์ ํํ ์์๋ฅผ ๋ฌดํ๋๋ก ๋๋๋ฉด?? - ์๋ฐ์คํฌ๋ฆฝํธ์๋
0
๊ณผ-0
์ด ์กด์ฌํ๋ค. - ์์ ์์ ํ๊ธฐ๋ง
-0
์ผ๋ก ํ๋ ๊ฒ์ด ์๋๋ผ ํน์ ์์์ ์ฐ์ฐ ๊ฒฐ๊ณผ ๋ํ-0
์ผ๋ก ๋จ์ด์ง๋ค.
var a = 0 / -3; // -0
var b = 0 * -3; // -0
- ๋ง์
๊ณผ ๋บ์
์๋
-0
์ด ๋์ฌ ์๊ฐ ์๋ค. - ๋ช
์ธ์ ์ํ๋ฉด
-0
์ ๋ฌธ์์ดํ ํ๋ฉด ํญ์"0"
์ด๋ค. - ๋ฐ๋๋ก ํ๋ฉด ์๋ ๊ทธ๋๋ก ๋ณด์ฌ์ค๋ค.
+"-0"; // -0
Number("-0"); // -0
JSON.parse("-0"); // -0
JSON.stringify(-0); // "0"
- ํ์คํ๊ฒ
-0
๊ณผ0
์ ๊ตฌ๋ถํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํด์ค๋ค.
function isNegZero(n) {
n = Number(n);
return (n === 0) && (1 / n === -Infinity);
}
isNegZero(-0); // true
isNegZero(0 / -3); //true
isNegZero(0); // false
- ์ด๋ ๊ฒ
-0
์ ๋ง๋ ์ด์ ๋ ๊ฐ์ ํฌ๊ธฐ๋ก ์ด๋ค ์ ๋ณด(ex. ์ ๋๋ฉ์ด์ ํ๋ ์๋น ๋๊น ์๋)์ ๊ทธ ๊ฐ์ ๋ถํธ๋ก ๋ ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๋์์ ๋ํ๋ด์ผ ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
๐ ํน์ดํ ๋๋ฑ ๋น๊ตโ
- ES6๋ถํฐ๋
NaN
๊ณผ0
,-0
๊ฐ์ ๋๋ฑ ๋น๊ต์ ๋ํ ์ก๋คํ ์์ธ๋ฅผ ๊ฑฑ์ ํ์ง ์์๋ ๋ ๊ฐ์ด ์ ๋์ ์ผ๋ก ๋๋ฑํ์ง๋ฅผ ํ์ธํ๋ ์๋ก์ด ์ ํธ๋ฆฌํฐ๋ฅผ ์ง์ํ๋๋ฐObject.is()
๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
var a = 2 / 'foo';
var b = -3 * 0;
Object.is(a, NaN); // true
Object.is(b, -0); // true
Object.is(b, 0); //false
==
๋===
๊ฐ ์์ ํ๋ค๋ฉด ๊ตณ์ดObject.is()
๋ ์ฌ์ฉํ์ง ์๋ ํธ์ด ์ข๋ค.- ๊ธฐ๋ณธ ์ฐ์ฐ์๊ฐ ์ข ๋ ํจ์ธ์ ์ข๊ณ ์ผ๋ฐ์ ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
Object.is()
๋ ์ฃผ๋ก ํน์ดํ ๋๋ฑ ๋น๊ต์ ์ด๋ค.
๐ฏ ๊ฐ vs ๋ ํผ๋ฐ์คโ
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฐ์ ์ด๋ค ๋ณ์๊ฐ ๋ค๋ฅธ ๋ณ์๋ฅผ ์ฐธ์กฐํ ์ ์๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ ํผ๋ฐ์ค๋ ๊ฐ์ ๊ฐ๋ฆฌํค๋ฏ๋ก ์๋ก ๋ค๋ฅธ 10๊ฐ์ ๋ ํผ๋ฐ์ค๊ฐ ์๋ค๋ฉด ์ด๋ค์ ์ ๋ง๋ค ํญ์ ๊ณต์ ๋ ๋จ์ผ ๊ฐ์ ๊ฐ๋ณ์ ์ผ๋ก ์ฐธ์กฐํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์๋ ๊ฐ ๋๋ ๋ ํผ๋ฐ์ค์ ํ ๋น ๋ฐ ์ ๋ฌ์ ์ ์ดํ๋ ๊ตฌ๋ฌธ ์์(Syntacic Hint)๊ฐ ์ ํ ์๋ค.
- ๋์ , ๊ฐ์ ํ์ ๋ง์ผ๋ก ๊ฐ-๋ณต์ฌ, ๋ ํผ๋ฐ์ค-๋ณต์ฌ ๋ ์ค ํ์ชฝ์ด ๊ฒฐ์ ๋๋ค.
var a = 2;
var b = a; // b๋ ์ธ์ ๋ a์์ ๊ฐ์ ๋ณต์ฌํ๋ค.
b++;
a; // 2
b; // 3
var c = [1, 2, 3];
var d = c; // d๋ ๊ณต์ ๋ [1, 2, 3]๊ฐ์ ๋ ํผ๋ฐ์ค๋ค.
d.push(4);
c; // [1,2,3,4]
d; // [1,2,3,4]
null
,undefined
,string
,number
,boolean
๊ทธ๋ฆฌ๊ณ ES6์symbol
๊ฐ์ ๋จ์ ํ(์์ ๊ฐ)์ ์ธ์ ๋ ๊ฐ-๋ณต์ฌ ๋ฐฉ์์ผ๋ก ํ ๋น/์ ๋ฌ๋๋ค.- ๊ฐ์ฒด๋ ํจ์ ๋ฑ ํฉ์ฑ ๊ฐ์ ํ ๋น/์ ๋ฌ์ ๋ฐ๋์ ๋ ํผ๋ฐ์ค ์ฌ๋ณธ์ ์์ฑํ๋ค.
- ์ ์์ ์ฝ๋์์ a์๋ 2๋ผ๋ ์ด๊ธฐ ์ฌ๋ณธ์ด ๋ค์ด๊ฐ๊ณ , b์๋ ๋ ๋ค๋ฅธ ์ฌ๋ณธ์ด ์๋ฆฌ๋ฅผ ์ก๋๋ค. ๋ฐ๋ผ์ b๋ฅผ ๋ฐ๊ฟ์ผ๋ก์จ a๊น์ง ๋์์ ๊ฐ์ ๋ณ๊ฒฝํ ๋ฐฉ๋ฒ์ ์๋ค.
- ํ์ง๋ง, c์ d๋ ๋ชจ๋ ํฉ์ฑ ๊ฐ์ด์ ๋์ผํ ๊ณต์ ๊ฐ
[1,2,3]
์ ๋ํ ๊ฐ๋ณ ๋ ํผ๋ฐ์ค๋ค. - ์ฌ๊ธฐ์ ๊ธฐ์ตํด์ผ ํ ์ ์ c์ d๊ฐ
[1,2,3]
์ ์์ ํ๋ ๊ฒ์ด ์๋๋ผ ๋จ์ง ์ด ๊ฐ์ ๋๋ฑํ๊ฒ ์ฐธ์กฐ๋ง ํ๋ค๋ ์ฌ์ค์ด๋ค. - ๋ฐ๋ผ์ ๋ ํผ๋ฐ์ค๋ก ์ค์ ๊ณต์ ํ ๋ฐฐ์ด ๊ฐ์ด ๋ณ๊ฒฝ๋๋ฉด, ์ด ๊ณต์ ๊ฐ ํ ๊ตฐ๋ฐ๋ง ์ํฅ์ ๋ฏธ์น๋ฏ๋ก ๋ ๋ ํผ๋ฐ์ค๋ ๊ฐฑ์ ๋ ๊ฐ
[1,2,3,4]
๋ฅผ ๋์์ ๋ฐ๋ผ๋ณด๊ฒ ๋๋ค. - ๋ ํผ๋ฐ์ค๋ ๋ณ์๊ฐ ์๋ ๊ฐ ์์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ฏ๋ก A ๋ ํผ๋ฐ์ค๋ก B ๋ ํผ๋ฐ์ค๊ฐ ๊ฐ๋ฆฌํค๋ ๋์์ ๋ณ๊ฒฝํ ์๋ ์๋ค.
var a = [1,2,3];
var b = a;
a; // [1,2,3]
b; // [1,2,3]
// ๊ทธ ํ
b = [4,5,6];
a; // [1,2,3]
b; // [4,5,6]
b = [4,5,6]
์ผ๋ก ํ ๋นํด๋ a๊ฐ ์ฐธ์กฐํ๋[1,2,3]
์ ์ํฅ์ ๋ฐ์ง ์๋๋ค.- ๊ทธ๋ ๊ฒ ๋๋ ค๋ฉด b๊ฐ ๋ฐฐ์ด์ ๊ฐ๋ฆฌํค๋ ๋ ํผ๋ฐ์ค๊ฐ ์๋ ํฌ์ธํฐ๊ฐ ๋์ด์ผ ํ๋๋ฐ, ๋ค์ ๋งํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์ ํฌ์ธํฐ๋ ์๋ค.
- ๋ค์ ์์ ๋ ํจ์ ์ธ์์ด๋ค.
function foo(x) {
x.push(4);
x; // [1,2,3,4]
// ๊ทธ ํ
x = [4,5,6];
x.push(7);
x; // [4,5,6,7]
}
var a = [1,2,3];
foo(a);
a; // [1,2,3,4]
- a๋ฅผ ์ธ์๋ก ๋๊ธฐ๋ฉด a์ ๋ ํผ๋ฐ์ค ์ฌ๋ณธ์ด x์ ํ ๋น๋๋ค. x์ a๋ ๋ชจ๋ ๋์ผํ
[1,2,3]
๊ฐ์ ๊ฐ๋ฆฌํค๋ ๋ณ๋์ ๋ ํผ๋ฐ์ค๋ค. - ํจ์ ๋ด๋ถ์์ ์ด ๋ ํผ๋ฐ์ค๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ์์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง๋ง, ๊ทธ ํ
x = [4,5,6]
์ผ๋ก ์ ๊ฐ์ ํ ๋นํด๋ ์ด๊ธฐ ๋ ํผ๋ฐ์ค a๊ฐ ์ฐธ์กฐํ๊ณ ์๋ ๊ฐ์๋ ์๋ฌด๋ฐ ์ํฅ์ด ์๋ค. - ์ฆ, a ๋ ํผ๋ฐ์ค๋ ์ฌ์ ํ
[1,2,3,4]
๊ฐ์ ๋ฐ๋ผ๋ณด๊ณ ์๋ค. - ๋ ํผ๋ฐ์ค x๋ก a๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฐ์ ๋ฐ๊ฟ ๋๋ฆฌ๋ ์๋ค. ๋ค๋ง a์ x ๋ ๋ค ๊ฐ๋ฆฌํค๋ ๊ณต์ ๊ฐ์ ๋ด์ฉ๋ง ๋ฐ๊ฟ ์ ์๋ค.
- ๋ฐฐ์ด์ ์๋ก ์์ฑํ์ฌ ํ ๋นํ๋ ์์ผ๋ก๋ a์ ๋ด์ฉ์
[4,5,6,7]
๋ก ๋ฐ๊ฟ ์ ์๋ค. - ๊ธฐ์กด์ ์กด์ฌํ๋ ๋ฐฐ์ด ๊ฐ๋ง ๋ณ๊ฒฝํด์ผ ํ๋ค.
function foo(x) {
x.push(4);
x; // [1,2,3,4]
// ๊ทธ ํ
x.length = 0; // ๊ธฐ์กด ๋ฐฐ์ด์ ์ฆ์ ๋น์ด๋ค.
x.push(4,5,6,7);
x; // [4,5,6,7]
}
var a = [1,2,3];
foo(a);
a; // [4,5,6,7]
x.length = 0; x.push(4,5,6,7);
์ ์ ๋ฐฐ์ด์ ์์ฑํ๋ ์ฝ๋๊ฐ ์๋๋ผ, ์ด๋ฏธ ๋ ๋ณ์๊ฐ ๊ณต์ ํ ๋ฐฐ์ด์ ๋ณ๊ฒฝํ๋ ์ฝ๋์ด๋ฏ๋ก a๋ ์๋ก์ด ๊ฐ [4,5,6,7]์ ๊ฐ๋ฆฌํจ๋ค.- ํฉ์ฑ ๊ฐ์ ๊ฐ-๋ณต์ฌ์ ์ํด ํจ๊ณผ์ ์ผ๋ก ์ ๋ฌํ๋ ค๋ฉด ์์ ๊ฐ์ ์ฌ๋ณธ์ ๋ง๋ค์ด ์ ๋ฌํ ๋ ํผ๋ฐ์๊ฐ ์๋ณธ์ ๊ฐ๋ฆฌํค์ง ์๊ฒ ํ๋ฉด ๋๋ค.
foo(a.slice());
- ์ธ์ ์์ด
slice()
๋ฅผ ํธ์ถํ๋ฉด ์ ํ ์๋ก์ด ๋ฐฐ์ด์ (์์ ๋ณต์ฌ์ ์ํ) ์ฌ๋ณธ์ ๋ง๋ ๋ค. - ์ด๋ ๊ฒ ๋ณต์ฌํ ์ฌ๋ณธ๋ง์ ๊ฐ๋ฆฌํค๋ ๋ ํผ๋ฐ์ค๋ฅผ ์ ๋ฌํ๋
foo()
๋ a์ ๋ด์ฉ์ ๊ฑด๋๋ฆด ์ ์๋ค. - ๋ฐ๋๋ก ์ค์นผ๋ผ ์์ ๊ฐ์ ๋ ํผ๋ฐ์ค์ฒ๋ผ ๋ฐ๋ ๊ฐ์ด ๋ฐ๋ก๋ฐ๋ก ๋ฐ์๋๋๋ก ๋๊ธฐ๋ ค๋ฉด ์์ ๊ฐ์ ๋ค๋ฅธ ํฉ์ฑ ๊ฐ(๊ฐ์ฒด, ๋ฐฐ์ด ๋ฑ)์ผ๋ก ๊ฐ์ธ์ผํ๋ค.
function foo(wrapper) {
wrapper.a = 42;
}
var obj = {
a: 2
};
foo(obj);
obj.a; // 42
obj
๋ ์ค์นผ๋ผ ์์ ํ๋กํผํฐ a๋ฅผ ๊ฐ์ผ ๋ํผ(Wrapper)๋กfoo()
ํจ์์obj
๋ ํผ๋ฐ์ค ์ฌ๋ณธ์ด ์ ๋ฌ๋๊ณ ๋ํผ ์ธ์์ ๊ฐ์ ๋ฐ๊พผ๋ค.- ์ด์ ๋ํผ ๋ ํผ๋ฐ์ค๋ก ๊ณต์ ๋ ๊ฐ์ฒด์ ์ ๊ทผํ์ฌ ํ๋กํผํฐ๋ฅผ ์์ ํ ์ ์๋ค.
- ๊ฐ์ ์๋ฆฌ๋ก 2์ ๊ฐ์ ์ค์นผ๋ผ ์์ ๊ฐ์ ๋ ํผ๋ฐ์ค ํํ๋ก ๋๊ธฐ๋ ค๋ฉด
Number
๊ฐ์ฒด ๋ ํผ๋ก ์์ ๊ฐ์ ๋ฐ์ฑํ๋ฉด ๋๋ค. Number
๊ฐ์ฒด์ ๋ ํผ๋ฐ์ค ์ฌ๋ณธ์ด ํจ์์ ์ ๋ฌ๋๋ ๊ฒ์ ๋ง์ง๋ง ๊ณต์ ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ํผ๋ฐ์ค๊ฐ ์๋ค๊ณ ์๋์ผ๋ก ๊ณต์ ๋ ์์ ๊ฐ์ ๋ณ๊ฒฝํ ๊ถํ์ด ์ฃผ์ด์ง๋ ๊ฒ์ ์๋๋ค.
function foo(x) {
x = x + 1;
x; // 3
}
var a = 2;
var b = new Number(a); // Object(a)๋ ๊ฐ์ ํํ์ด๋ค.
foo(b); // 2
- ์์ ๋ฌธ์ ๋ ๋ด๋ถ์ ์ค์นผ๋ผ ์์ ๊ฐ์ด ๋ถ๋ณ์ด๋ ์ ์ด๋ค.(๋ฌธ์์ด, ๋ถ๋ฆฌ์ธ ํฌํจ)
- ์ค์นผ๋ผ ์์ ๊ฐ 2๋ฅผ ๊ฐ์ง
Number
๊ฐ์ฒด๊ฐ ์๋ค๋ฉด, ์ด์ ๋์ผํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ์์ ๊ฐ์ ๊ฐ์ง๋๋ก ๋ณ๊ฒฝํ ์ ์๋ค. - ๋จ์ง ๋ค๋ฅธ ๊ฐ์ ๋ฃ์, ์์ ํ ๋ณ๊ฐ์
Number
๊ฐ์ฒด๋ฅผ ์์ฑํ ์๋ ์๋ค. - ํํ์
x + 1
์์x
๊ฐ ์ฌ์ฉ๋ ๋ด๋ถ์ ๊ฐ์ง๋ ์ค์นผ๋ผ ์์ ๊ฐ 2 ๋Number
๊ฐ์ฒด์์ ์๋ ์ธ๋ฐ์ฑ๋๋ฏ๋กx = x + 1
์x
๋ ๊ณต์ ๋ ๋ ํผ๋ฐ์ค์์Number
๊ฐ์ฒด๋ก ๊ต๋ฌํ๊ฒ ๋ค๋ฐ๋๊ณ2 + 1
๋ง์ ๊ฒฐ๊ณผ์ธ ์ค์นผ๋ผ ์์ ๊ฐ 3์ ๊ฐ๊ฒ ๋๋ค. - ๋ฐ๋ผ์ b๋ ์์ ๊ฐ 2๋ฅผ ์์ด, ๋ณ๊ฒฝ๋์ง ์์/๋ถ๋ณ์ ์๋ณธ
Number
๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ค. - ํ์ง๋ง, ์ด๋ ๊ฒ ๊ฐ์ฒด ๋ ํผ
Number
๋ฅผ ์ฌ์ฉํ๊ธฐ๋ณด๋จ ์ฐจ๋ผ๋ฆฌ ์ฒ์๋ถํฐ ์์ ๊ฐ์ฒด ๋ ํผ(obj)๋ฅผ ์ฐ๋ ํธ์ด ํจ์ฌ ๋ซ๋ค.
๐ฏ ์ ๋ฆฌํ๊ธฐโ
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด์ ๋ชจ๋ ํ์ ์ ๊ฐ๋ค์ ์ซ์๋ก ์ธ๋ฑ์ฑํ ์งํฉ์ด๋ค.
- ๋ฌธ์์ด์ ์ผ์ข ์ ์ ์ฌ ๋ฐฐ์ด์ด์ง๋ง, ๋๋ฆ ํน์ฑ์ด ์๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด๋ก ๋ค๋ฃจ๊ณ ์ ํ ๋๋ ์กฐ์ฌํด์ผ ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ ์ซ์๋ ์ ์์ ๋ถ๋ ์์์ ์ซ์๋ฅผ ๋ชจ๋ ํฌํจํ๋ค.
null
ํ์ ์null
์ด๋ผ๋ ๊ฐ ํ๋๋ฟ์ด๊ณ , ๋ง์ฐฌ๊ฐ์ง๋กundefined
ํ์ ๋ ๊ฐ์undefined
๋ฟ์ด๋ค.undefined
๋ ํ ๋น๋ ๊ฐ์ด ์๋ค๋ฉด ๋ชจ๋ ๋ณ์/ํ๋กํผํฐ์ ๋ํดํธ ๊ฐ์ด๋ค.void
์ฐ์ฐ์๋ ์ด๋ค ๊ฐ์ด๋ผ๋undefined
๋ก ๋ง๋ค์ด ๋ฒ๋ฆฐ๋ค.- ์ซ์์๋
NaN
,+Infinity
,-Infinity
,-0
๊ณผ ๊ฐ์ ํน์ ๊ฐ์ด ์๋ค. - ๋จ์ ์ค์นผ๋ผ ์์ ๊ฐ(๋ฌธ์์ด, ์ซ์ ๋ฑ)์ ๊ฐ-๋ณต์ฌ์ ์ํด, ํฉ์ฑ ๊ฐ(๊ฐ์ฒด ๋ฑ)์ ๋ ํผ๋ฐ์ค-๋ณต์ฌ์ ์ํด ๊ฐ์ด ํ ๋น/์ ๋ฌ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์์ ๋ ํผ๋ฐ์ค๋ ๋ค๋ฅธ ์ธ์ด์ ๋ ํผ๋ฐ์ค/ํฌ์ธํฐ์๋ ์ ํ ๋ค๋ฅธ ๊ฐ๋ ์ผ๋ก, ๋ ๋ค๋ฅธ ๋ณ์/๋ ํผ๋ฐ์ค๊ฐ ์๋ ์ค์ง ์์ ์ ๊ฐ๋ง ๊ฐ๋ฆฌํจ๋ค.