์๋ฐ์คํฌ๋ฆฝํธ ์ฐ์ฐ์๋ ๋ณ์์ ๊ฐ์ ์กฐ์ํ๋ ๋ฐ ์์ด ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ์ด ๊ธ์์ ๋ค๋ฃจ๋ ๋ค์ํ ์ฐ์ฐ์์ ์ค๋ช ์ ํตํด ์๋ฐ์คํฌ๋ฆฝํธ ์ฐ์ฐ์๋ฅผ ์๋ฒฝํ๊ฒ ์ดํดํ๊ณ ํจ์จ์ ์ผ๋ก ํ์ฉํ ์ ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
โฃ ๋ชฉ์ฐจ
01. ๊ธฐ๋ณธ ์ฐ์ฐ์๐ข
1. ์ฐ์ ์ฐ์ฐ์
JavaScript์์์ ์ฐ์ ์ฐ์ฐ์๋ ์ซ์ํ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ ์ํ์ ์ธ ์ฐ์ฐ์ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ฃผ์ ์ฐ์ ์ฐ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ๋ง์ (+)
๋ง์ ์ฐ์ฐ์๋ ์ซ์๋ฅผ ๋ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
let a = 5;
let b = 3;
let sum = a + b; // 5 + 3
console.log(sum); // ์ถ๋ ฅ: 8
2. ๋บ์ (-)
๋บ์ ์ฐ์ฐ์๋ ์ซ์๋ฅผ ๋นผ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
let a = 10;
let b = 4;
let difference = a - b; // 10 - 4
console.log(difference); // ์ถ๋ ฅ: 6
3. ๊ณฑ์ (*)
๊ณฑ์ ์ฐ์ฐ์๋ ์ซ์๋ฅผ ๊ณฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
let a = 7;
let b = 2;
let product = a * b; // 7 * 2
console.log(product); // ์ถ๋ ฅ: 14
4. ๋๋์ (/)
๋๋์ ์ฐ์ฐ์๋ ์ซ์๋ฅผ ๋๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
let a = 10;
let b = 3;
let quotient = a / b; // 10 / 3
console.log(quotient); // ์ถ๋ ฅ: ์ฝ 3.3333
5. ๋๋จธ์ง (%)
๋๋จธ์ง ์ฐ์ฐ์๋ ๋๋์ ์ ๋๋จธ์ง ๊ฐ์ ๋ฐํํฉ๋๋ค.
let a = 10;
let b = 3;
let remainder = a % b; // 10์ 3์ผ๋ก ๋๋ ๋๋จธ์ง
console.log(remainder); // ์ถ๋ ฅ: 1
์ฃผ์์ฌํญ
- ์ฐ์ ์ฐ์ฐ์๋ ์ซ์ํ ๋ฐ์ดํฐ์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์ ์ ํฌํจํ ํผ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ผ๋ก ์ซ์ํ์ผ๋ก ๋ณํ๋ฉ๋๋ค.
- ๋๋์ ์ฐ์ฐ์์์ 0์ผ๋ก ๋๋๋ ๊ฒฝ์ฐ Infinity๊ฐ ๋ฐํ๋ฉ๋๋ค. 0์ผ๋ก ๋๋ ๋๋ ์ฃผ์ํด์ผ ํฉ๋๋ค.
- JavaScript์์๋ ์ฐ์ฐ์ ์ฐ์ ์์๋ฅผ ๊ณ ๋ คํ์ฌ ์ฐ์ฐ์ด ์ํ๋ฉ๋๋ค. ๊ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ฐ์ ์ฐ์ ์์๋ฅผ ๋ช ํํ๊ฒ ํ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ฐ์ ์ฐ์ฐ์๋ค์ ์ ์ ํ ํ์ฉํ์ฌ ์ซ์ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉํ ์ ์์ต๋๋ค.
2. ์ฆ๊ฐ ์ฐ์ฐ์
์ฆ๊ฐ ์ฐ์ฐ์๋ ๋ณ์์ ๊ฐ์ ์ฆ๊ฐ์ํค๊ฑฐ๋ ๊ฐ์์ํค๋ ๋จํญ ์ฐ์ฐ์์ ๋๋ค. JavaScript์์๋ ๋ ๊ฐ์ง ํํ์ ์ฆ๊ฐ ์ฐ์ฐ์๊ฐ ์์ต๋๋ค. ์ ์ ์ฆ๊ฐ ์ฐ์ฐ์์ ํ์ ์ฆ๊ฐ ์ฐ์ฐ์์ ๋๋ค.
1. ์ ์ ์ฆ๊ฐ ์ฐ์ฐ์ (++)
์ ์ ์ฆ๊ฐ ์ฐ์ฐ์๋ ๋ณ์์ ๊ฐ์ ๋จผ์ ์ฆ๊ฐ์ํจ ํ, ๊ทธ ๊ฐ์ ๋ฐํํฉ๋๋ค.
let a = 5;
let b = ++a;
console.log(a); // ์ถ๋ ฅ: 6
console.log(b); // ์ถ๋ ฅ: 6
์ ์์ ์์ ++a๋ ๋ณ์ a์ ๊ฐ์ 1 ์ฆ๊ฐ์ํจ ํ์, ์ฆ๊ฐ๋ ๊ฐ์ ๋ณ์ b์ ํ ๋นํฉ๋๋ค. ๋ฐ๋ผ์ a์ b์ ๊ฐ์ ๋ชจ๋ 6์ด ๋ฉ๋๋ค.
2. ํ์ ์ฆ๊ฐ ์ฐ์ฐ์ (--)
ํ์ ์ฆ๊ฐ ์ฐ์ฐ์๋ ๋ณ์์ ๊ฐ์ ๋จผ์ ๋ฐํํ ํ, ๊ทธ ํ์ ๋ณ์์ ๊ฐ์ ์ฆ๊ฐ์ํต๋๋ค.
let a = 5;
let b = a--;
console.log(a); // ์ถ๋ ฅ: 4
console.log(b); // ์ถ๋ ฅ: 5
์ ์์ ์์ a--๋ ๋ณ์ a์ ๊ฐ์ ๋ณ์ b์ ํ ๋นํ ํ์, ๋ณ์ a์ ๊ฐ์ 1 ๊ฐ์์ํต๋๋ค. ๋ฐ๋ผ์ a๋ 4๊ฐ ๋๊ณ b๋ 5๊ฐ ๋ฉ๋๋ค.
์ฐ์ฐ์์ ์์น
- ์ค๋ช : ์ฆ๊ฐ ์ฐ์ฐ์์ ์์น์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง ์ ์์ต๋๋ค.
- ์์
let result = 1;
console.log(result); // 1
result = number++;
console.log(result, number); // 1 2
result = number--;
console.log(result, number); // 2 1
result = ++number;
console.log(result, number); // 2 2
result = --number;
console.log(result, number); // 1 1
์ฃผ์์ฌํญ
- ์ฆ๊ฐ ์ฐ์ฐ์๋ ๋จํญ ์ฐ์ฐ์์ด๋ฏ๋ก, ์ฌ์ฉ ์ ๋ณ์๋ง ํผ์ฐ์ฐ์๋ก ์ฌ์ฉ๋ฉ๋๋ค.
- ์ฆ๊ฐ ์ฐ์ฐ์๋ ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ถ์์ฉ์ด ์์ผ๋ฏ๋ก, ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์์ธก ๊ฐ๋ฅ์ฑ์ ์ํด ์ ์ ํ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
- ๋ณ์์ ๊ฐ์ ์ฆ๊ฐ์ํค๊ฑฐ๋ ๊ฐ์์ํฌ ๋, ์ ์์ ํ์์ ์ฐจ์ด์ ์ ์ดํดํ๊ณ ์ ์ ํ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ฆ๊ฐ ์ฐ์ฐ์๋ ๋ฐ๋ณต๋ฌธ์์ ์์ฃผ ์ฌ์ฉ๋๋ฉฐ, ๋ณ์๋ฅผ ํ ๋ฒ์ ์ฆ๊ฐ์ํค๊ฑฐ๋ ๊ฐ์์ํค๋ ๊ฐํธํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
์ซ์ ํ์ ์ด ์๋ ํ์ ์ +, - ์ฌ์ฉํ๋ค๋ฉด?
JavaScript์์ ์ซ์ ํ์ ์ด ์๋ ๋ฐ์ดํฐ ํ์ ์ +์ - ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋, ์ด ์ฐ์ฐ์๋ค์ ํด๋น ๋ฐ์ดํฐ ํ์ ์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์ํฉ๋๋ค.
1. ๋ฌธ์์ด๊ณผ + ์ฐ์ฐ์
+ ์ฐ์ฐ์๋ ๋ฌธ์์ด ์ฐ๊ฒฐ(concatenation)์ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ๋ฌธ์์ด๊ณผ ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์ ์ +๋ก ๊ฒฐํฉํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ์ฐ๊ฒฐ๋ฉ๋๋ค.
let str = 'Hello';
let num = 10;
console.log(str + num); // ์ถ๋ ฅ: "Hello10"
console.log(str + true); // ์ถ๋ ฅ: "Hellotrue"
console.log(str + { key: 'value' }); // ์ถ๋ ฅ: "Hello[object Object]"
์ ์์์์ + ์ฐ์ฐ์๋ ๋ฌธ์์ด๊ณผ ์ซ์, ๋ถ๋ฆฌ์ธ, ๊ฐ์ฒด ๋ฑ์ ๊ฒฐํฉํ์ฌ ์๋ก์ด ๋ฌธ์์ด์ ์์ฑํฉ๋๋ค. ๋ค๋ฅธ ํ์ ์ ๋ฐ์ดํฐ๋ ๋ฌธ์์ด๋ก ๋ณํ๋์ด ์ฐ๊ฒฐ๋ฉ๋๋ค.
2. ๋ฌธ์์ด๊ณผ - ์ฐ์ฐ์
- ์ฐ์ฐ์๋ ์ซ์ ์ฐ์ฐ์๋ง ์ฌ์ฉ๋ ์ ์์ผ๋ฏ๋ก, ๋ฌธ์์ด๊ณผ ํจ๊ป ์ฌ์ฉํ๋ฉด ์ซ์๋ก ๋ณํ๋์ด ๊ณ์ฐ๋ฉ๋๋ค.
let str = '10';
let num = 5;
console.log(str - num); // ์ถ๋ ฅ: 5 (๋ฌธ์์ด '10'์ ์ซ์ 10์ผ๋ก ๋ณํํ์ฌ ๊ณ์ฐ)
console.log('Hello' - 'World'); // ์ถ๋ ฅ: NaN (๋ฌธ์์ด์ ์ซ์๋ก ๋ณํํ ์ ์์ผ๋ฏ๋ก NaN ๋ฐํ)
์ ์์์์ '10' - 5๋ '10'์ ์ซ์ 10์ผ๋ก ๋ณํํ์ฌ 5๋ฅผ ๋นผ์ 5๋ฅผ ์ถ๋ ฅํฉ๋๋ค. 'Hello' - 'World'๋ ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํํ ์ ์์ผ๋ฏ๋ก NaN(Not a Number)์ ๋ฐํํฉ๋๋ค.
3. ๊ฐ์ฒด์ +, - ์ฐ์ฐ์
๊ฐ์ฒด์ + ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด, ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์์ด ์ฐ๊ฒฐ(concatenation)์ด ์ด๋ฃจ์ด์ง๋๋ค.
let obj = { key: 'value' };
console.log(obj + ' additional text'); // ์ถ๋ ฅ: "[object Object] additional text"
๊ฐ์ฒด์ +, - ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, JavaScript๋ ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ณํํ์ฌ ์ฐ์ฐ์ ์ํํฉ๋๋ค. ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก๋ [object Object]์ ๊ฐ์ ํํ๋ก ๋ณํ๋ฉ๋๋ค.
๊ฒฐ๋ก
JavaScript์์ +์ - ์ฐ์ฐ์๋ ์ฃผ๋ก ์ซ์ํ ๋ฐ์ดํฐ ํ์ ์์ ์ฌ์ฉ๋๋ฉฐ, ๋ค๋ฅธ ๋ฐ์ดํฐ ํ์ ์ ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ์๋์ผ๋ก ํ ๋ณํ์ด ์ด๋ฃจ์ด์ง๋ฉฐ ๋ฌธ์์ด ์ฐ๊ฒฐ(concatenation)์ด ์ด๋ฃจ์ด์ง๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ ํ์ ์ ๋ฐ๋ผ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๊ฒ ๋์ค๋ฏ๋ก ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
02. ํ ๋น ์ฐ์ฐ์๐ ๏ธ
ํ ๋น ์ฐ์ฐ์๋ ๋ณ์์ ๊ฐ์ ํ ๋นํ ๋ ์ฌ์ฉ๋๋ฉฐ, ๋ค์ํ ํํ๊ฐ ์์ต๋๋ค. JavaScript์์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํ ๋น ์ฐ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
1. ๊ธฐ๋ณธํ ๋น ์ฐ์ฐ์ (=)
- ๊ธฐ๋ณธ ํ ๋น ์ฐ์ฐ์(=)๋ ๋ณ์์ ๊ฐ์ ํ ๋นํ๋ ๊ฐ์ฅ ๊ฐ๋จํ ํํ์ ํ ๋น ์ฐ์ฐ์์ ๋๋ค.
let x = 10;
let y = 'Hello';
let z = true;
์ ์์์์ = ์ฐ์ฐ์๋ ์ค๋ฅธ์ชฝ ํผ์ฐ์ฐ์(๊ฐ)๋ฅผ ์ผ์ชฝ ํผ์ฐ์ฐ์(๋ณ์)์ ํ ๋นํฉ๋๋ค.
2. ์ฐ์ ์ฐ์ฐ๊ณผ ํจ๊ป ํ ๋น (+=, -=, *=, /=, %=)
์ฐ์ ์ฐ์ฐ์์ ๊ฒฐํฉํ์ฌ ๊ฐ์ ๊ณ์ฐํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ ํ ๋นํ๋ ์ฐ์ฐ์๋ค์ ๋๋ค.
let a = 5;
a += 3; // a = a + 3;
console.log(a); // ์ถ๋ ฅ: 8
let b = 10;
b -= 4; // b = b - 4;
console.log(b); // ์ถ๋ ฅ: 6
let c = 3;
c *= 2; // c = c * 2;
console.log(c); // ์ถ๋ ฅ: 6
let d = 10;
d /= 5; // d = d / 5;
console.log(d); // ์ถ๋ ฅ: 2
let e = 15;
e %= 4; // e = e % 4;
console.log(e); // ์ถ๋ ฅ: 3
์ด ์ฐ์ฐ์๋ค์ ๊ฐ๊ฐ ๋ง์ (+=), ๋บ์ (-=), ๊ณฑ์ (*=), ๋๋์ (/=), ๋๋จธ์ง(%) ์ฐ์ฐ์ ์ํํ ํ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ ํ ๋นํฉ๋๋ค.
3. ๋ฌธ์์ด ์ฐ๊ฒฐ ํ ๋น (+=)
๋ฌธ์์ด ์ฐ๊ฒฐ์ ์ฌ์ฉ๋์ด ๋ฌธ์์ด๊ณผ ๋ณ์ ๋๋ ๋ค๋ฅธ ๊ฐ๋ค์ ๊ฒฐํฉํ์ฌ ๋ฌธ์์ด๋ก ๋ง๋ญ๋๋ค.
let str = 'Hello';
str += ' World';
console.log(str); // ์ถ๋ ฅ: "Hello World"
4. ๋นํธ ์ฐ์ฐ ํ ๋น (<<=, >>=, >>>=, &=, |=, ^=)
๋นํธ ์ฐ์ฐ์ ์ํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ ํ ๋นํ๋ ์ฐ์ฐ์๋ค์ ๋๋ค. ๊ฐ ์ฐ์ฐ์๋ ๋นํธ ์ํํธ, ๋นํธ AND, OR, XOR ์ฐ์ฐ ๋ฑ์ ์ํํฉ๋๋ค.
let a = 5;
a <<= 2; // a = a << 2; (๋นํธ ์ผ์ชฝ ์ํํธ ์ฐ์ฐ ํ ํ ๋น)
console.log(a); // ์ถ๋ ฅ: 20
let b = 7;
b &= 5; // b = b & 5; (๋นํธ AND ์ฐ์ฐ ํ ํ ๋น)
console.log(b); // ์ถ๋ ฅ: 5
5. ๋ ผ๋ฆฌ ์ฐ์ฐ ํ ๋น (&&=, ||=)
๋ ผ๋ฆฌ ์ฐ์ฐ์์ ๊ฒฐํฉํ์ฌ ๋ ผ๋ฆฌ ์ฐ์ฐ์ ์ํํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ณ์์ ํ ๋นํฉ๋๋ค. JavaScript์์๋ ์์ง ๋ ผ๋ฆฌ ์ฐ์ฐ ํ ๋น ์ฐ์ฐ์๋ ์ง์๋์ง ์์ผ๋ฉฐ, ์ต์ JavaScript ๋ฒ์ ์์ ์ง์๋ ์ ์์ต๋๋ค.
let a = true;
a &&= false; // a = a && false;
console.log(a); // ์ถ๋ ฅ: false
let b = true;
b ||= false; // b = b || false;
console.log(b); // ์ถ๋ ฅ: true
์ฃผ์์ฌํญ
- ํ ๋น ์ฐ์ฐ์๋ ๋ณ์์ ๊ฐ์ ํ ๋นํ ๋ ์ฌ์ฉ๋๋ฉฐ, ๋ณ์์ ๊ฐ์ ๋ณ๊ฒฝ์ํต๋๋ค.
- ๋ค์ํ ํํ์ ํ ๋น ์ฐ์ฐ์๋ ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ณ , ๋ณต์กํ ์ฐ์ฐ์ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
- ํนํ ์ฐ์ ์ฐ์ฐ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ ํ ๋น ์ฐ์ฐ์๋ ๋ณ์์ ๊ฐ์ ์ฐ์ฐํ๊ณ ์ฆ์ ํ ๋นํ ์ ์์ด ๋งค์ฐ ์ ์ฉํฉ๋๋ค.
03. ๋น๊ต ์ฐ์ฐ์โ๏ธ
๋น๊ต ์ฐ์ฐ์๋ JavaScript์์ ๊ฐ๋ค์ ๋น๊ตํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ฆฌ์ธ(true ๋๋ false)์ผ๋ก ๋ฐํํ๋ ์ฐ์ฐ์๋ค์ ๋๋ค. ์ฃผ๋ก ์กฐ๊ฑด๋ฌธ๊ณผ ๋ ผ๋ฆฌ์ ํ๋ฆ ์ ์ด์ ์ฌ์ฉ๋ฉ๋๋ค. JavaScript์์์ ์ฃผ์ ๋น๊ต ์ฐ์ฐ์๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
1. ๋๋ฑ ๋น๊ต ์ฐ์ฐ์ (==)
๋๋ฑ ๋น๊ต ์ฐ์ฐ์๋ ๋ ํผ์ฐ์ฐ์๊ฐ ๊ฐ์ ๊ฐ์ ๊ฐ๋์ง ๋น๊ตํฉ๋๋ค. ๊ฐ์ด ๊ฐ์ผ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๋ค๋ฅด๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค. ์๋์ผ๋ก ํ ๋ณํ์ ์ํํ ์ ์์ต๋๋ค.
console.log(5 == 5); // true
console.log(5 == '5'); // true (์ซ์์ ๋ฌธ์์ด ๋น๊ต, ์ซ์๋ก ๋ณํํ์ฌ ๋น๊ต)
console.log(5 == 10); // false
2. ์ผ์น ๋น๊ต ์ฐ์ฐ์ (===)
์ผ์น ๋น๊ต ์ฐ์ฐ์๋ ๋ ํผ์ฐ์ฐ์์ ๊ฐ๊ณผ ๋ฐ์ดํฐ ํ์ ์ด ๋ชจ๋ ๊ฐ์์ง ๋น๊ตํฉ๋๋ค. ๊ฐ๊ณผ ๋ฐ์ดํฐ ํ์ ์ด ๋ชจ๋ ๊ฐ์ผ๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ํ๋๋ผ๋ ๋ค๋ฅด๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
console.log(5 === 5); // true
console.log(5 === '5'); // false (์ซ์์ ๋ฌธ์์ด ๋น๊ต, ๋ฐ์ดํฐ ํ์
๋ ๋ค๋ฆ)
console.log(5 === 10); // false
FAQโ
==์ ===์ ์ฐจ์ด์ ์?
- ==๋ ๊ฐ๋ง ๋น๊ตํ๊ณ , ===๋ ์๋ฃํ๊น์ง ๋น๊ตํฉ๋๋ค.
3. ๋ถ๋ฑ ๋น๊ต ์ฐ์ฐ์ (!=)
๋ถ๋ฑ ๋น๊ต ์ฐ์ฐ์๋ ๋ ํผ์ฐ์ฐ์๊ฐ ๋ค๋ฅธ ๊ฐ์ ๊ฐ๋์ง ๋น๊ตํฉ๋๋ค. ๊ฐ์ด ๋ค๋ฅด๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ฐ์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค. ์๋์ผ๋ก ํ ๋ณํ์ ์ํํ ์ ์์ต๋๋ค.
console.log(5 != 5); // false
console.log(5 != '5'); // false (์ซ์์ ๋ฌธ์์ด ๋น๊ต, ์ซ์๋ก ๋ณํํ์ฌ ๋น๊ต)
console.log(5 != 10); // true
4. ๋ถ์ผ์น ๋น๊ต ์ฐ์ฐ์ (!==)
๋ถ์ผ์น ๋น๊ต ์ฐ์ฐ์๋ ๋ ํผ์ฐ์ฐ์์ ๊ฐ๊ณผ ๋ฐ์ดํฐ ํ์ ์ด ๋ชจ๋ ๋ค๋ฅธ์ง ๋น๊ตํฉ๋๋ค. ๊ฐ์ด๋ ๋ฐ์ดํฐ ํ์ ์ค ํ๋๋ผ๋ ๋ค๋ฅด๋ฉด true๋ฅผ ๋ฐํํ๊ณ , ๊ฐ๊ณผ ๋ฐ์ดํฐ ํ์ ์ด ๋ชจ๋ ๊ฐ์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
console.log(5 !== 5); // false
console.log(5 !== '5'); // true (์ซ์์ ๋ฌธ์์ด ๋น๊ต, ๋ฐ์ดํฐ ํ์
๋ ๋ค๋ฆ)
console.log(5 !== 10); // true
5. ํฌ๊ธฐ ๋น๊ต ์ฐ์ฐ์ (>, <, >=, <=)
ํฌ๊ธฐ ๋น๊ต ์ฐ์ฐ์๋ ๋ ํผ์ฐ์ฐ์์ ํฌ๊ธฐ๋ฅผ ๋น๊ตํฉ๋๋ค. >๋ ์ผ์ชฝ ํผ์ฐ์ฐ์๊ฐ ์ค๋ฅธ์ชฝ ํผ์ฐ์ฐ์๋ณด๋ค ํฌ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค. <๋ ์ผ์ชฝ ํผ์ฐ์ฐ์๊ฐ ์ค๋ฅธ์ชฝ ํผ์ฐ์ฐ์๋ณด๋ค ์์ผ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค. >=๋ ์ผ์ชฝ ํผ์ฐ์ฐ์๊ฐ ์ค๋ฅธ์ชฝ ํผ์ฐ์ฐ์๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค. <=๋ ์ผ์ชฝ ํผ์ฐ์ฐ์๊ฐ ์ค๋ฅธ์ชฝ ํผ์ฐ์ฐ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค.
console.log(5 > 3); // true
console.log(5 < 3); // false
console.log(5 >= 5); // true
console.log(5 <= 3); // false
์ฃผ์์ฌํญ
- ๋น๊ต ์ฐ์ฐ์๋ ๋ค์ํ ๋ฐ์ดํฐ ํ์ (์ซ์, ๋ฌธ์์ด, ๋ถ๋ฆฌ์ธ ๋ฑ)๊ณผ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. JavaScript๋ ํ์์ ๋ฐ๋ผ ์๋์ผ๋ก ํ ๋ณํ์ ์ํํ์ฌ ๋น๊ต๋ฅผ ์ํํฉ๋๋ค.
- ๋๋ฑ ๋น๊ต ์ฐ์ฐ์(==)์ ๋ถ๋ฑ ๋น๊ต ์ฐ์ฐ์(!=)๋ ํ ๋ณํ ํ ๋น๊ต๋ฅผ ์ํํ๋ฏ๋ก ์์์น ๋ชปํ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. ๊ฐ๋ฅํ๋ฉด ์ผ์น ๋น๊ต ์ฐ์ฐ์(===,!==)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ํ์ ๊น์ง ์ ํํ๊ฒ ๋น๊ตํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ๋ฌธ์์ด ๋น๊ต๋ ์ ๋์ฝ๋ ์ฝ๋ ํฌ์ธํธ๋ก ๋น๊ต๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ฌ์ ์์ผ๋ก ๋น๊ต๋ฉ๋๋ค.
๋น๊ต ์ฐ์ฐ์๋ ํ๋ก๊ทธ๋๋ฐ์์ ๋งค์ฐ ์ค์ํ ์ญํ ์ ํ๋ฉฐ, ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ๋ณต๋ฌธ ๋ฑ์์ ๋ฐ์ดํฐ์ ๋น๊ต์ ํ๋ฆ ์ ์ด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ํํ ์ ์๋๋ก ๋์์ค๋๋ค.
04. ๋ ผ๋ฆฌ ์ฐ์ฐ์๐
JavaScript์์๋ ์ธ ๊ฐ์ง ์ฃผ์ ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ฅผ ์ ๊ณตํ์ฌ ์ฌ๋ฌ ๊ฐ์ ์กฐ๊ฑด์ ๊ฒฐํฉํ๊ฑฐ๋ ๋ ผ๋ฆฌ์ ์ธ ๊ณ์ฐ์ ์ํํ ์ ์์ต๋๋ค. ๊ฐ ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ ๋ถ๋ฆฌ์ธ(Boolean) ๊ฐ์ ๋ํด ์๋ํ๋ฉฐ, ๊ฒฐ๊ณผ๋ก ๋ถ๋ฆฌ์ธ ๊ฐ์ ๋ฐํํฉ๋๋ค.
1. ๋ ผ๋ฆฌ AND (&&)
๋ ผ๋ฆฌ AND ์ฐ์ฐ์๋ ๋ ๊ฐ์ ํผ์ฐ์ฐ์๊ฐ ๋ชจ๋ true์ธ ๊ฒฝ์ฐ์๋ง true๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
console.log(true && true); // true
console.log(true && false); // false
console.log(false && true); // false
console.log(false && false); // false
์ฃผ์ ํน์ง
- ๋ชจ๋ ํผ์ฐ์ฐ์๊ฐ true์ผ ๋๋ง true๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ฒซ ๋ฒ์งธ false ํผ์ฐ์ฐ์๋ฅผ ๋ง๋๋ฉด ๋๋จธ์ง ํผ์ฐ์ฐ์๋ฅผ ํ๊ฐํ์ง ์๊ณ ์ฆ์ ํ๊ฐ๋ฅผ ๋ฉ์ถฅ๋๋ค. ์ด๋ฅผ "๋จ์ถ ํ๊ฐ(short-circuit evaluation)"๋ผ๊ณ ํฉ๋๋ค.
2. ๋ ผ๋ฆฌ OR (||)
๋ ผ๋ฆฌ OR ์ฐ์ฐ์๋ ๋ ๊ฐ์ ํผ์ฐ์ฐ์ ์ค ํ๋ ์ด์์ด true์ผ ๊ฒฝ์ฐ true๋ฅผ ๋ฐํํ๊ณ , ๋ ํผ์ฐ์ฐ์ ๋ชจ๋ false์ผ ๋๋ง false๋ฅผ ๋ฐํํฉ๋๋ค.
console.log(true || true); // true
console.log(true || false); // true
console.log(false || true); // true
console.log(false || false); // false
์ฃผ์ ํน์ง
- ํ๋ ์ด์์ ํผ์ฐ์ฐ์๊ฐ true๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ฒซ ๋ฒ์งธ true ํผ์ฐ์ฐ์๋ฅผ ๋ง๋๋ฉด ๋๋จธ์ง ํผ์ฐ์ฐ์๋ฅผ ํ๊ฐํ์ง ์๊ณ ์ฆ์ ํ๊ฐ๋ฅผ ๋ฉ์ถฅ๋๋ค. (๋จ์ถ ํ๊ฐ)
๋จ์ถ ํ๊ฐ (Short Circuit Evaluation)
- ์ค๋ช : ๋ ผ๋ฆฌ ์ฐ์ฐ์์ ์ข์ธก ์กฐ๊ฑด๋ง์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐ์ ํ ์ ์๋ ๊ฒฝ์ฐ, ์ฐ์ธก ์กฐ๊ฑด์ ํ๊ฐํ์ง ์์ต๋๋ค.
- && ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋:
- ์ผ์ชฝ ๊ฐ์ด true๋ฉด ์ค๋ฅธ์ชฝ ๊ฐ์ ๋ฐํ
- ์ผ์ชฝ ๊ฐ์ด false๋ฉด ์ผ์ชฝ ๊ฐ์ ๋ฐํ
- || ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋:
- ์ผ์ชฝ ๊ฐ์ด true๋ฉด ์ผ์ชฝ ๊ฐ์ ๋ฐํ
- ์ผ์ชฝ ๊ฐ์ด false๋ฉด ์ค๋ฅธ์ชฝ ๊ฐ์ ๋ฐํ
- ์์
console.log(true || "JavaScript"); // true
console.log(false || "JavaScript"); // "JavaScript"
console.log(false && "JavaScript"); // false
console.log(true && "JavaScript"); // "JavaScript"
console.log(true && true && "JavaScript"); // "JavaScript"
3. ๋ ผ๋ฆฌ NOT (!)
๋ ผ๋ฆฌ NOT ์ฐ์ฐ์๋ ๋จํญ ์ฐ์ฐ์๋ก, ํผ์ฐ์ฐ์์ ๋ถ๋ฆฌ์ธ ๊ฐ์ ๋ฐ๋๋ก ๋ฐ๊ฟ๋๋ค. true๋ false๋ก, false๋ true๋ก ๋ณํ๋ฉ๋๋ค.
console.log(!true); // false
console.log(!false); // true
์ฃผ์ ํน์ง
- ํผ์ฐ์ฐ์์ ๋ถ๋ฆฌ์ธ ๊ฐ์ ๋ฐ๋๋ก ๋ณ๊ฒฝํฉ๋๋ค.
๋ ผ๋ฆฌ ์ฐ์ฐ์ ์ฌ์ฉ ์์
์กฐ๊ฑด๋ฌธ์์์ ์ฌ์ฉ
let x = 10;
let y = 5;
if (x > 5 && y < 8) {
console.log('Both conditions are true');
}
if (x === 10 || y === 10) {
console.log('At least one condition is true');
}
if (!x) {
console.log('x is falsy (not true)');
}
๋จ์ถ ํ๊ฐ(Short-circuit evaluation) ํ์ฉ
function validateInput(input) {
// input์ด ์กด์ฌํ๊ณ (defined), ์ ํจํ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฒฝ์ฐ์๋ง ์คํ
if (input && input.length > 0) {
console.log('Valid input');
} else {
console.log('Invalid input');
}
}
๋ ผ๋ฆฌ ์ฐ์ฐ์๋ JavaScript์์ ์กฐ๊ฑด๋ถ ๋ก์ง์ ์์ฑํ ๋ ์ค์ํ ์ญํ ์ ํฉ๋๋ค. ๋ณต์กํ ์กฐ๊ฑด์ ๊ฒฐํฉํ๊ฑฐ๋, ๋จ์ผ ์กฐ๊ฑด์ ๋ฐ๋๋ก ๋ง๋ค์ด์ผ ํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
05. ์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์โ
์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์๋ JavaScript์ ๋ง์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ๋๋ ์กฐ๊ฑด๋ถ ํํ์์ ๋๋ค. ์ด ์ฐ์ฐ์๋ ๊ฐ๋จํ ์กฐ๊ฑด์ ํ๊ฐํ๊ณ , ์กฐ๊ฑด์ด ์ฐธ(true)์ธ ๊ฒฝ์ฐ์ ๊ฑฐ์ง(false)์ธ ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ฐ์ ๋ฐํํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ ์ค๋ก ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์์ด ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
๊ตฌ์กฐ
์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋ค.
์กฐ๊ฑด ? ์ฐธ์ผ ๋ ๊ฐ : ๊ฑฐ์ง์ผ ๋ ๊ฐ
- ์กฐ๊ฑด์ ํ๊ฐํ ์กฐ๊ฑด์์ ๋๋ค. ์ด ์กฐ๊ฑด์์ ๋ถ๋ฆฌ์ธ์ผ๋ก ํ๊ฐ๋ ์ ์๋ ํํ์ด์ด์ผ ํฉ๋๋ค.
- ์ฐธ์ผ ๋ ๊ฐ์ ์กฐ๊ฑด์ด ์ฐธ์ผ ๊ฒฝ์ฐ ๋ฐํ๋ ๊ฐ์ ๋๋ค.
- ๊ฑฐ์ง์ผ ๋ ๊ฐ์ ์กฐ๊ฑด์ด ๊ฑฐ์ง์ผ ๊ฒฝ์ฐ ๋ฐํ๋ ๊ฐ์ ๋๋ค.
์์
๋ค์ํ ๋ฐ์ดํฐ ์ ํ๊ณผ ์กฐ๊ฑด์ ์ฌ์ฉํ์ฌ ์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์๋ฅผ ์ค๋ช ํ๊ฒ ์ต๋๋ค:
์ซ์ ๋น๊ต
let age = 20;
let message = age >= 18 ? '์ฑ์ธ์
๋๋ค' : '๋ฏธ์ฑ๋
์์
๋๋ค';
console.log(message); // ์ถ๋ ฅ: "์ฑ์ธ์
๋๋ค"
์ ์์์์๋ age ๋ณ์์ ๊ฐ์ด 18 ์ด์์ธ์ง ํ์ธํ์ฌ, ์ฐธ์ผ ๊ฒฝ์ฐ '์ฑ์ธ์ ๋๋ค'๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด '๋ฏธ์ฑ๋ ์์ ๋๋ค'๋ฅผ ๋ฐํํฉ๋๋ค.
๋ณ์ ์ ๋ฌด ์ฒดํฌ
let name = ''; // ๋๋ null ๋๋ undefined
let displayName = name ? name : '๋ฐฉ๋ฌธ์'; // name์ด ์กด์ฌํ๋ฉด name์ ์ฌ์ฉ, ์๋๋ฉด '๋ฐฉ๋ฌธ์'๋ฅผ ์ฌ์ฉ
console.log(displayName); // ์ถ๋ ฅ: "๋ฐฉ๋ฌธ์"
์ ์์์์๋ name ๋ณ์๊ฐ ๋น์ด์๊ฑฐ๋(null, undefined, ๋น ๋ฌธ์์ด ๋ฑ) ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ '๋ฐฉ๋ฌธ์'๋ฅผ ๋ฐํํฉ๋๋ค.
์ฌ์ฉ ์ฌ๋ก
์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์๋ ์ฃผ๋ก ๋ณ์ ์ด๊ธฐํ, ์กฐ๊ฑด๋ถ ํ ๋น, JSX(React) ๋ฑ์์ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค. ๋ค์์ ๋ณ์ ์ด๊ธฐํ์์์ ์ฌ์ฉ ์์์ ๋๋ค.
let isAdmin = true;
let greeting = isAdmin ? 'ํ์ํฉ๋๋ค, ๊ด๋ฆฌ์๋!' : 'ํ์ํฉ๋๋ค';
console.log(greeting); // ์ถ๋ ฅ: "ํ์ํฉ๋๋ค, ๊ด๋ฆฌ์๋!"
์ฃผ์์ฌํญ
- ์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์๋ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์ ์งํ๋ ๋ฐ ์ ์ฉํ์ง๋ง, ๋๋ฌด ๋ณต์กํ๊ฒ ์ค์ฒฉ๋์ง ์๋๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค. ๊ฐ๋ ์ฑ์ ํด์น์ง ์๋๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
- ์กฐ๊ฑด์ด ๋ณต์กํ๊ฑฐ๋ ์ฌ๋ฌ ๊ฒฝ์ฐ์ ์๋ฅผ ์ฒ๋ฆฌํด์ผ ํ ๋๋ ์ผ๋ฐ์ ์ธ if...else ๋ฌธ์ด ๋ ์ ํฉํ ์ ์์ต๋๋ค.
์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์๋ JavaScript์ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ์ ์ฉํ ๋ฌธ๋ฒ ์ค ํ๋์ด๋ฉฐ, ์ ์ ํ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ณ ์ฝ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
06. ๊ธฐํ ์ฐ์ฐ์๐ ๏ธ
1. typeof ์ฐ์ฐ์
typeof ์ฐ์ฐ์๋ JavaScript์์ ์ฌ์ฉ๋๋ฉฐ, ํผ์ฐ์ฐ์์ ๋ฐ์ดํฐ ํ์ ์ ๋ฌธ์์ด๋ก ๋ฐํํฉ๋๋ค. ์ด ์ฐ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ ์ฃผ์ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค.
typeof ์ฐ์ฐ์์ ์ฌ์ฉ๋ฒ
// ๋ณ์ ์ ์ธ
let x = 5;
let y = 'Hello';
let z = true;
let obj = {};
let arr = [];
// ๋ฐ์ดํฐ ํ์
ํ์ธ
console.log(typeof x); // ์ถ๋ ฅ: "number"
console.log(typeof y); // ์ถ๋ ฅ: "string"
console.log(typeof z); // ์ถ๋ ฅ: "boolean"
console.log(typeof obj); // ์ถ๋ ฅ: "object"
console.log(typeof arr); // ์ถ๋ ฅ: "object" (๋ฐฐ์ด๋ "object"๋ก ๋ฐํ๋จ)
console.log(typeof undefinedVariable); // ์ถ๋ ฅ: "undefined"
console.log(typeof null); // ์ถ๋ ฅ: "object" (null์ "object"๋ก ๋ฐํ๋จ, ํ์ ํธํ์ฑ ์ด์)
์ ์์์์ typeof ์ฐ์ฐ์๋ ๊ฐ ๋ณ์์ ๋ฐ์ดํฐ ํ์ ์ ๋ฌธ์์ด๋ก ๋ฐํํฉ๋๋ค.
์ฃผ์์ฌํญ
- typeof ์ฐ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐํ ๊ฐ๋ค์ ๊ฐ์ง๋๋ค:
- "undefined": ์ ์๋์ง ์์ ๋ณ์ ๋๋ ๊ฐ์ด ์๋ ๋ณ์
- "number": ์ซ์, ์ ์๋ ๋ถ๋ ์์์ ์ซ์ ๋ชจ๋ ํฌํจ
- "string": ๋ฌธ์์ด
- "boolean": ๋ถ๋ฆฌ์ธ ๊ฐ (true ๋๋ false)
- "object": ๊ฐ์ฒด, ๋ฐฐ์ด, null ๋ฑ (ํจ์๋ ๊ฐ์ฒด์ ํ์ ํด๋์ค๋ก ๋ถ๋ฅ๋จ)
- "function": ํจ์
- "symbol": ES6์์ ์ถ๊ฐ๋ ์ฌ๋ณผ ํ์
- typeof ์ฐ์ฐ์๋ ๋ณ์์ ๊ฐ ์์ฒด๋ฅผ ํ๊ฐํ์ฌ ํ์ ์ ๋ฐํํฉ๋๋ค. ๋ณ์์ ๋ฐ์ดํฐ ํ์ ์ด ๋ณ๊ฒฝ๋๋๋ผ๋ typeof ์ฐ์ฐ์๋ ๋ณ์์ ์ด๊ธฐ ํ ๋น ํ์ ์ ๊ธฐ์ค์ผ๋ก ๋ฐํํฉ๋๋ค.
let foo = 42;
console.log(typeof foo); // ์ถ๋ ฅ: "number"
foo = 'bar';
console.log(typeof foo); // ์ถ๋ ฅ: "string"
- typeof ์ฐ์ฐ์๋ null ๊ฐ์ "object"๋ก ๋ฐํํ๋ ๊ฒ์ด JavaScript์ ์ด๊ธฐ ๋ฒ๊ทธ๋ก ์ธํ ํ์ ํธํ์ฑ ๋ฌธ์ ์ ๋๋ค. ์ด๋ JavaScript ์์ง์ ๋ด๋ถ ๊ตฌํ์์ ๊ธฐ์ธํ๋ฉฐ, ES6 ์ดํ์๋ ์ด๋ฌํ ๋ฐํ ๊ฐ์ ์ ์ง๋๊ณ ์์ต๋๋ค.
์ด์ ๊ฐ์ด typeof ์ฐ์ฐ์๋ ๋ณ์์ ๋ฐ์ดํฐ ํ์ ์ ๋น ๋ฅด๊ฒ ํ์ธํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ null์ ์ ์ธํ ๊ฐ์ฒด ํ์ ์ ๊ตฌ์ฒด์ ์ธ ๋ถ๋ฅ๋ typeof ์ฐ์ฐ์๋ก๋ ๋ถ๊ฐ๋ฅํ๋ฏ๋ก, ๊ฐ์ฒด์ ๊ตฌ์ฒด์ ์ธ ํ์ ์ ํ๋ณํ ๋๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
2. instanceof ์ฐ์ฐ์
instanceof ์ฐ์ฐ์๋ JavaScript์์ ์ฌ์ฉ๋๋ฉฐ, ๊ฐ์ฒด๊ฐ ํน์ ํด๋์ค(๋๋ ์์ฑ์ ํจ์)์ ์ธ์คํด์ค์ธ์ง๋ฅผ ํ์ธํ๋ ๋ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ์ฐ์ฐ์๋ ๊ฐ์ฒด์ ํ๋กํ ํ์ ์ฒด์ธ์ ๊ฒ์ฌํ์ฌ, ๊ฐ์ฒด๊ฐ ํน์ ํด๋์ค์ ์ธ์คํด์ค์ธ์ง๋ฅผ ํ๋ณํฉ๋๋ค.
instanceof ์ฐ์ฐ์์ ์ฌ์ฉ๋ฒ
// ์์ ํด๋์ค ์ ์
class Animal {
constructor(name) {
this.name = name;
}
}
// ์ธ์คํด์ค ์์ฑ
let dog = new Animal('Buddy');
// instanceof ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์คํด์ค ์ฌ๋ถ ํ์ธ
console.log(dog instanceof Animal); // ์ถ๋ ฅ: true
console.log(dog instanceof Object); // ์ถ๋ ฅ: true (๋ชจ๋ ๊ฐ์ฒด๋ Object์ ์ธ์คํด์ค์ด๊ธฐ๋ ํจ)
console.log(dog instanceof Array); // ์ถ๋ ฅ: false (dog์ Array์ ์ธ์คํด์ค๊ฐ ์๋)
์ ์์์์ dog instanceof Animal์ dog ๊ฐ์ฒด๊ฐ Animal ํด๋์ค์ ์ธ์คํด์ค์ธ์ง๋ฅผ ํ์ธํฉ๋๋ค. ๊ฒฐ๊ณผ๋ก true๊ฐ ๋์ค๋ฏ๋ก dog ๊ฐ์ฒด๋ Animal ํด๋์ค์ ์ธ์คํด์ค์ ๋๋ค.
์ฃผ์์ฌํญ
- instanceof ์ฐ์ฐ์๋ ๊ฐ์ฒด์ ํ๋กํ ํ์ ์ฒด์ธ์ ๋ฐ๋ผ๊ฐ๋ฉด์ ํด๋์ค(๋๋ ์์ฑ์ ํจ์)์ prototype ์์ฑ๊ณผ ๋น๊ตํฉ๋๋ค. ๋ฐ๋ผ์ ํด๋น ํด๋์ค์ ํ์ ํด๋์ค์ ์ธ์คํด์ค๋ true๋ฅผ ๋ฐํํ ์ ์์ต๋๋ค.
class Bird extends Animal {
fly() {
console.log(`${this.name} is flying.`);
}
}
let bird = new Bird('Polly');
console.log(bird instanceof Animal); // ์ถ๋ ฅ: true (Bird๋ Animal ํด๋์ค๋ฅผ ์์๋ฐ์์)
console.log(bird instanceof Bird); // ์ถ๋ ฅ: true
- instanceof ์ฐ์ฐ์๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ (์: ์ซ์, ๋ฌธ์์ด ๋ฑ)์ ๋ํด์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ์ฐ์ฐ์๋ ์ฃผ๋ก ๊ฐ์ฒด์ ์ธ์คํด์ค ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๋ฐ์ ์ฌ์ฉ๋ฉ๋๋ค.
let num = 5;
console.log(num instanceof Number); // TypeError: Right-hand side of 'instanceof' is not an object
์ ์์์์ num์ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์ ์ธ number์ด๋ฏ๋ก instanceof ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
instanceof ์ฐ์ฐ์๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ๊ฐ์ฒด์ ํ์
์ ํ์ธํ๊ณ , ๊ฐ์ฒด์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋ถ์ํ๋ ๋ฐ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
3. in ์ฐ์ฐ์
in ์ฐ์ฐ์๋ JavaScript์์ ์ฌ์ฉ๋๋ฉฐ, ๊ฐ์ฒด๊ฐ ํน์ ์์ฑ์ ๊ฐ์ง๊ณ ์๋์ง๋ฅผ ํ์ธํ๋ ๋ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. in ์ฐ์ฐ์๋ ๊ฐ์ฒด์ ํ๋กํผํฐ ์กด์ฌ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ ๋ ์ ์ฉํ๊ฒ ํ์ฉ๋ฉ๋๋ค.
in ์ฐ์ฐ์์ ์ฌ์ฉ๋ฒ
// ๊ฐ์ฒด ์ ์
let obj = { name: 'Alice', age: 30 };
// ์์ฑ ์กด์ฌ ์ฌ๋ถ ํ์ธ
console.log('name' in obj); // ์ถ๋ ฅ: true
console.log('age' in obj); // ์ถ๋ ฅ: true
console.log('job' in obj); // ์ถ๋ ฅ: false
์ ์์์์ 'name' in obj๋ obj ๊ฐ์ฒด์ name์ด๋ผ๋ ์์ฑ์ด ์กด์ฌํ๋์ง๋ฅผ ๊ฒ์ฌํฉ๋๋ค. ๊ฒฐ๊ณผ๋ก true๊ฐ ๋์ค๋ฏ๋ก obj ๊ฐ์ฒด๋ name ์์ฑ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ฃผ์์ฌํญ
- in ์ฐ์ฐ์๋ ๊ฐ์ฒด์ ์์๋ ์์ฑ๊น์ง ํ์ธํ ์ ์์ต๋๋ค. ์ฆ, ๊ฐ์ฒด ์์ฒด ๋ฟ๋ง ์๋๋ผ ํด๋น ๊ฐ์ฒด์ ํ๋กํ ํ์ ์ฒด์ธ์ ์์ฑ์ด ์กด์ฌํ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค.
- ๋ฐฐ์ด์ ๋ํด์๋ in ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐฐ์ด์์๋ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
let arr = [1, 2, 3];
console.log(0 in arr); // ์ถ๋ ฅ: true
console.log(1 in arr); // ์ถ๋ ฅ: true
console.log(2 in arr); // ์ถ๋ ฅ: true
console.log(3 in arr); // ์ถ๋ ฅ: false (์ธ๋ฑ์ค 3์ ์กด์ฌํ์ง ์์)
- in ์ฐ์ฐ์๋ ์์ฑ ์ด๋ฆ๋ง์ ๊ฒ์ฌํ๋ฉฐ, ํด๋น ์์ฑ์ด null์ด๋ undefined์ผ ๊ฒฝ์ฐ์๋ true๋ฅผ ๋ฐํํฉ๋๋ค.
let obj = { prop: null };
console.log('prop' in obj); // ์ถ๋ ฅ: true
in ์ฐ์ฐ์๋ ๊ฐ์ฒด์ ์์ฑ ์กด์ฌ ์ฌ๋ถ๋ฅผ ํ์ธํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ฉฐ, ์กฐ๊ฑด๋ฌธ์ด๋ ๋ฐ๋ณต๋ฌธ์์ ๊ฐ์ฒด์ ์์ฑ์ ์์ ํ๊ฒ ์ ๊ทผํ๋ ๋ฐ์๋ ๋์์ ์ค๋๋ค.
4. delete ์ฐ์ฐ์
delete ์ฐ์ฐ์๋ JavaScript์์ ์ฌ์ฉ๋๋ฉฐ, ์ฃผ๋ก ๊ฐ์ฒด์ ์์ฑ์ด๋ ๋ฐฐ์ด์ ์์๋ฅผ ์ ๊ฑฐํ๋ ๋ฐ์ ์ฐ์ ๋๋ค. delete ์ฐ์ฐ์๋ ๋ค์ ๋ ๊ฐ์ง ์ฃผ์ ์ฉ๋๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค:
- ๊ฐ์ฒด์ ์์ฑ ์ ๊ฑฐ: ๊ฐ์ฒด์์ ํน์ ์์ฑ์ ์ ๊ฑฐํฉ๋๋ค.
- ๋ฐฐ์ด ์์ ์ ๊ฑฐ: ๋ฐฐ์ด์์ ํน์ ์์๋ฅผ ์ ๊ฑฐํฉ๋๋ค.
- ์์
let obj = { name: 'Alice', age: 30 };
// ์์ฑ ์ ๊ฑฐ
delete obj.age;
console.log(obj); // ์ถ๋ ฅ: { name: 'Alice' }
์ ์์์์ delete obj.age;๋ obj ๊ฐ์ฒด์ age ์์ฑ์ ์ ๊ฑฐํฉ๋๋ค. ์ดํ obj ๊ฐ์ฒด๋ { name: 'Alice' }๊ฐ ๋ฉ๋๋ค.
let arr = [1, 2, 3, 4];
// ์์ ์ ๊ฑฐ
delete arr[2];
console.log(arr); // ์ถ๋ ฅ: [1, 2, empty, 4]
๋ฐฐ์ด์์ delete arr[2];๋ arr ๋ฐฐ์ด์ ์ธ๋ฑ์ค 2์ ํด๋นํ๋ ์์๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ [1, 2, empty, 4]๊ฐ ๋ฉ๋๋ค. ์ฌ๊ธฐ์ empty๋ ์ญ์ ๋ ์์๋ฅผ ๋ํ๋ด๋ ํ์์ ๋๋ค.
์ฃผ์์ฌํญ
- delete ์ฐ์ฐ์๋ ๊ฐ์ฒด์ ์์ฑ์ ์ ๊ฑฐํ ์ ์์ง๋ง, ์ค์ ๋ก ๋ฉ๋ชจ๋ฆฌ์์ ํด๋น ๊ฐ์ฒด๊ฐ ์ ๊ฑฐ๋๋ ๊ฒ์ ์๋๋๋ค. ๋จ์ง ๊ฐ์ฒด์ ์์ฑ์ด๋ ๋ฐฐ์ด์ ์์๋ฅผ ์ ๊ฑฐํ๋ ์ญํ ๋ง ํฉ๋๋ค.
- delete ์ฐ์ฐ์๋ ๋ฐฐ์ด์์ ์์๋ฅผ ์ ๊ฑฐํ ๋ ์์ ์์ฒด๋ฅผ ์ญ์ ํ์ง๋ง, ๋ฐฐ์ด์ ๊ธธ์ด๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค. ์ญ์ ๋ ์์๊ฐ empty๋ก ํ์๋๋ฉด์ ๋ฐฐ์ด์ ๊ธธ์ด๋ ๋ณํ์ง ์์ต๋๋ค.
- delete ์ฐ์ฐ์๋ ๊ฐ์ฒด์ ํ๋กํผํฐ ์ค์์๋ง ๋์ํ๋ฉฐ, ์ผ๋ฐ ๋ณ์๋ ํจ์, ์ ์ญ ๋ณ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด๋ฌํ ์ ๋ค์ ์ ๋ ํ์ฌ delete ์ฐ์ฐ์๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ์์ฑ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
5. void ์ฐ์ฐ์
void ์ฐ์ฐ์๋ JavaScript์์ ์ฌ์ฉ๋๋ ํน์ํ ๋จํญ ์ฐ์ฐ์์ ๋๋ค. void ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์๋ฅผ ํ๊ฐํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ undefined๋ก ๋ง๋ญ๋๋ค. ์ด ์ฐ์ฐ์๋ ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ํฉ์์ ์ฌ์ฉ๋ฉ๋๋ค:
1. ํ์ด์ง ์ด๋ ๋ฐฉ์ง: HTML <a> ํ๊ทธ์ href ์์ฑ์ javascript:void(0)์ ์ค์ ํ์ฌ ํด๋ฆญ ์ ํ์ด์ง ์ด๋์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
<a href="javascript:void(0);" onclick="doSomething()">Click me</a>
์ด ๊ฒฝ์ฐ, void(0)์ ์๋ฌด๋ฐ ์์ ์ ํ์ง ์๊ณ ํ์ฌ ํ์ด์ง์ ๋จธ๋ฌด๋ฅด๋๋ก ํฉ๋๋ค.
2. undefined ๋ฐํ: void ์ฐ์ฐ์๋ ํญ์ undefined๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์, ํจ์๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฑ์์ ๋ช
์์ ์ผ๋ก undefined๋ฅผ ๋ฐํํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
function doSomething() {
// ํจ์ ๋ด์ฉ...
return void 0;
}
3. IIFE (์ฆ์ ์คํ ํจ์ ํํ์): void ์ฐ์ฐ์๋ IIFE๋ฅผ ๋ง๋ค ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ์๋ ๋ณดํต void ๋ค์ ๊ดํธ ()๋ฅผ ์ฌ์ฉํ์ฌ ํํ์์ ๊ฐ์ธ๊ณ , ๊ทธ ์์ ํจ์ ์ ์๋ฅผ ๋ฃ์ต๋๋ค.
void function() {
// ์คํํ ์ฝ๋...
}();
์ ์์ ์์ void๋ ํจ์๋ฅผ ์คํํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฌด์ํฉ๋๋ค. ๋์ ์ undefined๋ฅผ ๋ฐํํฉ๋๋ค.
6. new ์ฐ์ฐ์
JavaScript์์ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋ ์ฌ์ฉ๋๋ ํน๋ณํ ์ฐ์ฐ์์ ๋๋ค. new ์ฐ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
- ์๋ก์ด ๊ฐ์ฒด ์์ฑ: new ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ๋ฉด ์๋ก์ด ๊ฐ์ฒด ์ธ์คํด์ค๊ฐ ์์ฑ๋ฉ๋๋ค.
- ํ๋กํ ํ์ ์ฐ๊ฒฐ: ์๋ก ์์ฑ๋ ๊ฐ์ฒด๋ ์์ฑ์ ํจ์์ ํ๋กํ ํ์ ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋ฉ๋๋ค. ์ด๋ ์์ฑ์ ํจ์์ prototype ์์ฑ์ ์ ์๋ ๋ฉ์๋๋ ์์ฑ์ ์ธ์คํด์ค์์ ์ฌ์ฉํ ์ ์๊ฒ ํด ์ค๋๋ค.
- ์ด๊ธฐํ: ์์ฑ์ ํจ์ ๋ด๋ถ์์ this๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ๊ฐ์ฒด์ ์ด๊ธฐ ์ํ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
- ์์
// ์์ฑ์ ํจ์ ์ ์
function Person(name, age) {
this.name = name;
this.age = age;
}
// ์๋ก์ด ์ธ์คํด์ค ์์ฑ
let person1 = new Person('Alice', 30);
let person2 = new Person('Bob', 25);
console.log(person1); // ์ถ๋ ฅ: Person { name: 'Alice', age: 30 }
console.log(person2); // ์ถ๋ ฅ: Person { name: 'Bob', age: 25 }
์ ์์์์ Person์ด๋ผ๋ ์์ฑ์ ํจ์๋ฅผ ์ ์ํ๊ณ , new Person(...)์ ์ฌ์ฉํ์ฌ ๋ ๊ฐ์ ์๋ก์ด Person ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์์ต๋๋ค. new Person(...)์ Person ์์ฑ์ ํจ์๋ฅผ ํธ์ถํ์ฌ ์๋ก์ด Person ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ , ํด๋น ๊ฐ์ฒด์๋ name๊ณผ age๋ผ๋ ์์ฑ์ด ์ค์ ๋ฉ๋๋ค.
์ฃผ์์ฌํญ
- ์์ฑ์ ํจ์ ์ด๋ฆ์ ๋๋ฌธ์๋ก ์์ํ๋ ๊ฒ์ด ๊ด๋ก์ ๋๋ค (ํ์ค์นผ ์ผ์ด์ค). ์ด๋ ์์ฑ์ ํจ์๊ฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํจ์์์ ๋ช ํํ ํ๊ธฐ ์ํจ์ ๋๋ค.
- new ์ฐ์ฐ์๋ ๋ฐ๋์ ์์ฑ์ ํจ์์ ํจ๊ป ์ฌ์ฉ๋์ด์ผ ํฉ๋๋ค. ์ผ๋ฐ ํจ์์ new๋ฅผ ์ฌ์ฉํ๋ฉด ์์์น ๋ชปํ ๋์์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
JavaScript์์ new ์ฐ์ฐ์๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ๋ฐ ๋งค์ฐ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
7. ์ง์
์ง์ ์ฐ์ฐ์ (**)๋ JavaScript์ ๋์ ๋ ๋น๊ต์ ์ต๊ทผ์ ์ฐ์ฐ์๋ก, ๊ฑฐ๋ญ์ ๊ณฑ ์ฐ์ฐ์ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ์ฐ์ฐ์๋ ์ขํญ์ ํผ์ฐ์ฐ์๋ฅผ ์ฐํญ์ ํผ์ฐ์ฐ์๋ก ๊ฑฐ๋ญ์ ๊ณฑํ ๊ฐ์ ๋ฐํํฉ๋๋ค.
์๋ฅผ ๋ค์ด, a ** b๋ a๋ฅผ b๋ฒ ๊ณฑํ ๊ฐ์ ๋ํ๋ ๋๋ค.
- ์์
console.log(2 ** 2); // 4
console.log(10 ** 3); // 1000
์ง์ ์ฐ์ฐ์๋ ์ผ๋ฐ์ ์ธ ๊ณฑ์
์ฐ์ฐ์ *๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๋ฌ ๋ฒ ๊ณฑํ๋ ๊ฒ๋ณด๋ค ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค์ด ์ค๋๋ค. JavaScript์์ ์ง์ ์ฐ์ฐ์๋ ES7(ECMAScript 2016)์์ ๋์
๋์์ผ๋ฉฐ, ๊ฑฐ๋ญ์ ๊ณฑ ์ฐ์ฐ์ ๋ณด๋ค ์ง๊ด์ ์ด๊ณ ๊ฐ๊ฒฐํ๊ฒ ํ ์ ์๋๋ก ๋์์ค๋๋ค.
8. null ๋ณํฉ ์ฐ์ฐ์
Null ๋ณํฉ ์ฐ์ฐ์ (??)๋ JavaScript์์ ๋์ ๋ ๋น๊ต์ ์ต๊ทผ์ ์ฐ์ฐ์๋ก, ํนํ ๋ณ์๊ฐ null ๋๋ undefined์ผ ๋ ๊ธฐ๋ณธ ๊ฐ์ ์ค์ ํ๋ ์ฉ๋๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ด ์ฐ์ฐ์๋ ๋ณ์์ ๊ฐ์ด null์ด๋ undefined์ธ์ง๋ฅผ ์ฒดํฌํ๊ณ , ๊ทธ ๊ฒฝ์ฐ์๋ง ์ฐ์ธก์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก || ์ฐ์ฐ์๋ Falsy ๊ฐ (false, '', 0, NaN, null, undefined)๋ฅผ ์ฒดํฌํ์ฌ ๊ธฐ๋ณธ ๊ฐ์ ์ค์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ || ์ฐ์ฐ์๋ Falsy ๊ฐ ์ธ์๋ false, '', 0 ๋ฑ๋ ํฌํจํ์ฌ ๊ธฐ๋ณธ ๊ฐ์ ์ค์ ํ๋ ๋ฐ ์ ํฉํ์ง ์์ ์ ์์ต๋๋ค.
- ์์
let score;
console.log(score); // undefined
// ?? ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ๊ธฐ๋ณธ๊ฐ ์ค์
score = score ?? 100;
console.log(score); // 100
// ์ด๋ฏธ ๊ฐ์ด ํ ๋น๋์๊ธฐ ๋๋ฌธ์, ?? ์ฐ์ฐ์๋ ์ฐ์ธก ๊ฐ์ ๋ฐํํ์ง ์์
score = score ?? 200;
console.log(score); // 100
// ์๋ก์ด ๋ณ์๋ฅผ ์ ์ธํ๊ณ ??= ์ฐ์ฐ์๋ฅผ ์ฌ์ฉ
let level;
level ??= 1; // level = level ?? 1;
console.log(level); // 1
07. ์ฐ์ฐ์ ์ฐ์ ์์๐
JavaScript์์๋ ์ฌ๋ฌ ์ฐ์ฐ์๋ค์ด ์์ผ๋ฉฐ, ์ด๋ค ์ฐ์ฐ์๋ค์ ์ฐ์ ์์์ ๋ฐ๋ผ ๊ณ์ฐ์ด ์ํ๋ฉ๋๋ค. ์ฐ์ฐ์ ์ฐ์ ์์๋ ์ฐ์ฐ์๊ฐ ํผ์ฐ์ฐ์์ ๋ํด ํ๊ฐ๋๋ ์์๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. ๋ค์์ JavaScript์์ ์ฃผ์ ์ฐ์ฐ์๋ค์ ์ฐ์ ์์๋ฅผ ๋์ ์์๋ถํฐ ๋ฎ์ ์์๊น์ง ์ ๋ฆฌํ ๊ฒ์ ๋๋ค.
๋์ ์ฐ์ ์์(์ฐ์ฐ์ด ๋จผ์ ์ํ๋๋ ์์)
- (): ๊ดํธ๋ฅผ ์ฌ์ฉํ ๊ทธ๋ฃนํ
- . []: ๊ฐ์ฒด ์์ฑ ์ ๊ทผ๊ณผ ๋ฐฐ์ด ์์ ์ ๊ทผ
- (): ํจ์ ํธ์ถ
- ++ --: ์ ์ ์ฆ๊ฐ ์ฐ์ฐ์
- ! ~ - + typeof void delete: ๋จํญ ์ฐ์ฐ์
- **: ์ง์ ์ฐ์ฐ์ (ES7๋ถํฐ ๋์ )
- * / %: ๊ณฑ์ , ๋๋์ , ๋๋จธ์ง ์ฐ์ฐ์
์ค๊ฐ ์ฐ์ ์์
- + -: ๋ง์ ๊ณผ ๋บ์ ์ฐ์ฐ์
- << >> >>>: ๋นํธ ์ํํธ ์ฐ์ฐ์
- < <= > >=: ๊ด๊ณ ๋น๊ต ์ฐ์ฐ์
- == != === !==: ๋๋ฑ ๋น๊ต์ ์ผ์น ๋น๊ต ์ฐ์ฐ์
- &: ๋นํธ AND ์ฐ์ฐ์
๋ฎ์ ์ฐ์ ์์
- ^: ๋นํธ XOR ์ฐ์ฐ์
- |: ๋นํธ OR ์ฐ์ฐ์
- &&: ๋ ผ๋ฆฌ AND ์ฐ์ฐ์
- ||: ๋ ผ๋ฆฌ OR ์ฐ์ฐ์
- ?:: ์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์ (์กฐ๊ฑด๋ถ ์ฐ์ฐ์)
- = += -= *= /= %= <<= >>= >>>= &= ^= |=: ํ ๋น ์ฐ์ฐ์
์ฐธ๊ณ ์ฌํญ
- ๊ฐ์ ์ฐ์ ์์์ ์ฐ์ฐ์๋ค์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ณ์ฐ๋ฉ๋๋ค.
- ์ฐ์ ์์๋ฅผ ๋ชจ๋ฅด๊ฑฐ๋ ํผ๋์ค๋ฌ์ธ ๋๋ ๊ดํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ฐ ์์๋ฅผ ๋ช ํํ ํ ์ ์์ต๋๋ค.
- JavaScript์์๋ ํน์ ์ฐ์ฐ์๋ค์ ์ฐ์ ์์๊ฐ ES6(ECMAScript 2015) ์ดํ์ ๋ณ๊ฒฝ๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด, &&์ ||์ ์ฐ์ ์์๊ฐ ์ด์ ๋ฒ์ ๋ณด๋ค ๋ ๋์์ก์ต๋๋ค.
์ด๋ฌํ ์ฐ์ฐ์ ์ฐ์ ์์๋ฅผ ์ดํดํ๊ณ ์ฌ์ฉํ๋ฉด ๋ณต์กํ ํํ์์ ํจ๊ณผ์ ์ผ๋ก ์์ฑํ ์ ์์ผ๋ฉฐ, ์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
08. ํต์ฌ ๋ด์ฉ๐