๐ ์ด ํฌ์คํ ์์๋ JavaScript์ 6๊ฐ์ง ์ฐ์ฐ์์ ์ฐ์ฐ์ ๋น๊ต ์, ์์ธ์ฌํญ์ ๋ํด ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
๐ฅ 6๊ฐ์ ์ฐ์ฐ์ ์ดํดํ๊ธฐ
๐ฅ 0, null, undefined ๋น๊ต
JavaScript์์ ์ฐ์ฐ์๋ ์ฌ์น์ฐ์ฐ์, ์ฆ๊ฐ์ฐ์ฐ์, ํ ๋น์ฐ์ฐ์, ๋น๊ต์ฐ์ฐ์, ๋ ผ๋ฆฌ์ฐ์ฐ์, ๋๋ฑ์ฐ์ฌ์๋ก ๊ตฌ๋ถํ ์ ์์ต๋๋ค.
์ฌ์น์ฐ์ฐ์๋ ์ํ ์๊ฐ์ ๋ฐฐ์ด ๋ง์
(+), ๋บ์
(-), ๊ณฑ์
(*), ๋๋์
(/), ๋๋จธ์ง(%) ๋ฑ์ ์๋ฏธํฉ๋๋ค.
๋ง์
์๋ ๋ฐ์ดํฐ ํ์
์ ๋ฐ๋ฅธ ๊ท์น์ด ์์ต๋๋ค. 1) plus : ์ซ์๋ผ๋ฆฌ๋ ๋ํฉ๋๋ค. 2) concat : 2์ค 1๊ฐ๋ผ๋ ํญ์ด string์ด๋ฉด ๋ถ์
๋๋ค.
console.log(1 + 1) // ๐ 2 console.log('Hello' + 999) // ๐ Hello999 console.log(999 + 'Hello') // ๐ 999Hello console.log('6' + 3); // ๐ 63 console.log(6 + '3'); // ๐ 63 console.log(2 + 4 + '3'); // ๐ 63
๋บ์
, ๊ณฑ์
, ๋๋์
, ๋๋จธ์ง ์ฐ์ฐ์ ๋ฑ์์๋ ๋๊ฐ์ ํญ์ด ๋ชจ๋ string์ด๋ผ๋ ์ฐ์ ์ซ์๋ก ๋ณํํ์ฌ ๊ณ์ฐ์ ์๋ํฉ๋๋ค.
์ซ์๋ก ๋ณํ๋์ง ์์ ์ง์ง ๋ฌธ์์ด์ด ํ๋๋ผ๋ ์๋ค๋ฉด Nan(Not a Number)๋ฅผ ๋ฐํํฉ๋๋ค. ์ซ์๊ฐ ์๋๋ผ๋ ์๋ฏธ์
๋๋ค.
console.log(10 - 2) // ๐ 8 console.log(5 * 2) // ๐ 10 console.log(8 / 2) // ๐ 4 console.log(7 % 2) // ๐ 1 console.log(6 - '2'); // ๐ 4 console.log('3' * 2); // ๐ 6 console.log('6' / '2'); // ๐ 3 console.log('9' % '2'); // ๐ 1 console.log('Hello' - 999) // ๐ Nan console.log(999 * 'Hello') // ๐ Nan
JavaScript์์ ๋ชซ์ ์ด๋ป๊ฒ ๊ตฌํ ๊น์? Python์์๋ ๋๋๊ธฐ(/), ๋ชซ(//), ๋๋จธ์ง(%) ์ ๋๋ค. ํ์ง๋ง, JavaScript์์๋ //๋ ์ฃผ์์ ์๋ฏธํ์ฃ . ๋ชซ์ ์์ฝ๊ฒ ๊ตฌํด์ฃผ๋ ์ฐ์ฐ์๊ฐ ์๋๋ด ๋๋ค. ์ด์ parseInt ํจ์๋ฅผ ์ฌ์ฉํด์ ๋ชซ์ ๊ตฌํฉ๋๋ค.
console.log(parseInt(5/2)) // 2 console.log(parseInt(33/2)) // 16 console.log(parseInt(32/8)) // 4
์ซ์๋ฅผ ์์ฐจ์ ์ผ๋ก ์ฆ๊ฐ(++)์ํค๊ฑฐ๋ ๊ฐ์(--)์ํค๋ ๊ฒ์ด ์ฆ๊ฐ์ฐ์ฐ์์ด๋ฉฐ, ๋ฐ๋ณต๋ฌธ์์ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค.
์ฆ, ++๋ counter = count + 1
๋ฅผ ์ถ์ฝํ์ฌ ํํํ ์์ด๊ณ , --๋ counter = count - 1
๋ฅผ ์ถ์ฝํ ๊ฒ๊ณผ ๊ฐ์ต๋๋ค.
let counter = 100; counter++; // 101 ๐ counter = count + 1 counter++; // 102 ๐ counter = count + 1 counter++; // 103 ๐ counter = count + 1 console.log(counter); // 103 counter--; // 102 ๐ counter = count - 1 counter--; // 101 ๐ counter = count - 1 counter--; // 100 ๐ counter = count - 1 console.log(counter); // 100
์ฆ๊ฐ์ฐ์ฐ์๋ ๋ณ์์ ์ฐ์ฌ์์ ์์น์ ๋ฐ๋ผ์ ์ ์ํ, ํ์ํ์ผ๋ก ๋๋ฉ๋๋ค.
์์ counter ๋ณ์์ ์์๋ ์ ์ํ ์
๋๋ค. ์ ์ํ์ ์ฆ๊ฐ์ฐ์ฌ์(++ ๋๋ --)๊ฐ ๋ณ์ ์์ ๋ถ์ด์์ต๋๋ค.
๋ง์ด ์ด๋ ต์ต๋๋ค. ์๋ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
// ์ฆ๊ฐ์ฐ์ฐ์ ์ ์ํ // counter๋ฅผ ๋จผ์ ์ฆ๊ฐ์ํจ ๋ค, ์ฆ๊ฐ๋ ๊ฐ์ ๋ฐํํ์ฌ ํ ๋นํจ let counter = 10; let a = ++counter; // ๐ let a = (counter = counter + 1) console.log(`counter: ${counter}, a: ${a}`) // ๐ counter: 11, a: 11 // ์ฆ๊ฐ์ฐ์ฌ์ ํ์ํ let counter = 10; let a = counter++; // ๐ let a = counter, counter = counter + 1 console.log(`counter: ${counter}, a: ${a}`) // ๐ counter: 11, a: 10
์ฆ๊ฐ์ฐ์ฌ์์์ ์ฃผ๋ก ๋ณด๋ ํํ๋ ์ ์ํ์ ๋๋ค. ์ ์ํ์ ์์ ์ ๋จผ์ ๊ณ์ฐ ํ๋ค์์ ๊ฐ์ ํ ๋น์ํต๋๋ค. ๋ฐ๋ผ์ ํ์ํ์ ๊ทธ ๋ฐ๋๋ก ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
// ์ ์ํ vs ํ์ํ ์์ let counter = 2; // ์ด๊ธฐ counter 2๋ก ์ ์ธ const preIncrement = ++counter; console.log(`preIncrement: ${preIncrement}, counter: ${counter}`); // preIncrement: 3, counter: 3 const postIncrement = counter++; console.log(`postIncrement: ${postIncrement}, counter: ${counter}`); // postIncrement: 3, counter: 4 const preDecrement = --counter; console<.log(`preDecrement: ${preDecrement}, counter: ${counter}`); // preDecrement: 3, counter: 3 const postDecrement = counter--; console.log(`postDecrement: ${postDecrement}, counter: ${counter}`); // postDecrement: 3, counter: 2
ํ ๋น์ฐ์ฌ์๋ ๊ทธ๋์ ๊ณ์ ์ฌ์ฉํ "=" ์
๋๋ค. ํ ๋นํ ๋ ์ฐ์ด๋ ์ฐ์ฐ์์ ์ผ์ข
์ด์ฃ . ์ถ์ฝํ์ ๋ํด ์๋ ์ ๋ฆฌํด๋ณด์์ด์.
"="์ ๊ธฐ์ค์ผ๋ก ์ผ์ชฝ์ ์๋ ํํ์์์ ๋จผ์ ๊ณ์ฐ์ด ๋จผ์ ์ด๋ค์ง๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ "="์ ๊ธฐ์ค์ผ๋ก ์ค๋ฅธ์ชฝ์ ์๋ ๋ณ์์ ํ ๋น์ํต๋๋ค.
let x = 3; let y = 6; x += y; // ๐ x = x + y console.log(x,y) // x=9, y=6 x -= y; // ๐ x = x - y console.log(x,y) // x=3, y=6 x *= y; // ๐ x = x * y console.log(x,y) // x=18, y=6 x /= y; // ๐ x = x / y console.log(x,y) // x=3, y=6
์ฐ์ฐ์์ ์ฐ์ ์์๋ ๋น๊ต์ ๋ฎ์ ํธ์ ๋๋ค.
let n = 2; n *= 3 + 5; // ๐ ํ ๋น์ฐ์ฐ์๊ฐ ์ฐ์ ์์ ๋ฎ์ ์ค๋ฅธ์ชฝ ์ฐ์ฐ(3+5)๋ถํฐ ์ฐ์ฐ๋ฉ๋๋ค. ์ดํ ํ ๋น์ฐ์ฐ์๊ฐ ์๋ํฉ๋๋ค. console.log(n); // 16
console.log(10 < 6); // false console.log(10 <= 6); // false console.log(10 > 6); // true console.log(10 >= 6); // ture
๋
ผ๋ฆฌ์ฐ์ฐ์๋ Truthy ๋๋ Falstyํ ๊ฐ ๋๋ Boolean ๊ฐ์ ๋น๊ตํ๋๋ฐ ์ฌ์ฉํ๊ณ , ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ Boolean ํํ๋ก ๋ฐํํฉ๋๋ค.
๋
ผ๋ฆฌ์ฐ์ฌ์์ ์ข
๋ฅ๋ OR์ฐ์ฐ์(||), AND์ฐ์ฐ์(&&), NOT์ฐ์ฐ์(!)๊ฐ ์์ต๋๋ค.
OR์ฐ์ฐ์(||)๋ ์ผ์ชฝ๋ถํฐ true๊ฐ์ ์ฐพ์๋๊ฐ๊ณ , true๊ฐ ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
console.log(true || true); // ๐ true console.log(true || false); // ๐ true console.log(false || true); // ๐ true console.log(false || false); // ๐ false console.log(false || "" || 700 || 300); // ๐ 700
AND์ฐ์ฐ์(&&)๋ ์ผ์ชฝ๋ถํฐ false๊ฐ์ ์ฐพ๊ณ , false๊ฐ ์์ผ๋ฉด true๋ฅผ ๋ฐํํฉ๋๋ค.
console.log(true && true); // ๐ true console.log(true && false); // ๐ false console.log(false && true); // ๐ false console.log(false && false); // ๐ false console.log(true && "jaewon" && 0 && 300 && -1); // ๐ 0
๋๋ฑํ์ง ์๋์ง๋ฅผ ๋น๊ตํ๋ ๊ฒ์ ๋๋ฑ์ฐ์ฌ์๋ผ ํ๋๋ฐ, ๋๋ฑํ๋ฉด true, ๋๋ฑํ์ง ์์ผ๋ฉด false๋ฅผ ๋ฐํํฉ๋๋ค.
๋ํ JavaScript์์๋ ๋น๊ตํ๋ ค๋ ํผ์ฐ์ฐ์๊ฐ ๋ค๋ฅธ ํ์
์ผ ๋๋ ํ๋ณํํ์ฌ ๋น๊ตํฉ๋๋ค.
์ด์ ๋๋ฑ์ฐ์ฐ์('==', equality operator)๋ฅผ ์ฌ์ฉํ์ฌ 0๊ณผ false๋ฅผ ๋น๊ตํ๋ฉด true์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
์ด๋ฅผ ๋ ์ ํํ๊ณ ์๊ฒฉํ๊ฒ ๊ตฌ๋ถํ๊ธฐ ์ํด์๋ ์ผ์น์ฐ์ฐ์('===', strict equality operator)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ผ์น์ฐ์ฐ์๋ ๋๋ฑ์ฐ์ฐ์์ ๊ฐ์ ๋น๊ต ๊ธฐ๋ฅ์ ๋ํด ๋ฐ์ดํฐ ํ์
๊น์ง ๊ฐ์์ง ํ์ธํ์ฌ true, false๋ฅผ ๋ฐํํฉ๋๋ค.
๋ฐ์ดํฐ ํ์
๊น์ง ๋น๊ตํ๋ค๋ ๊ฒ์ ํ๋ณํ์ํ์ง ์๊ณ ๊ทธ ์์ฒด๋ก ๊ฐ๊ณผ ๋ฐ์ดํฐ ํ์
์ ๋น๊ตํ๋ค๋ ์๋ฏธ์
๋๋ค.
๋๋ฑ์ฐ์ฐ์์ ์ผ์น์ฐ์ฐ์์ ๋ฐ๋๋ก ๋น๋๋ฑ์ฐ์ฐ์('!==')์ ๋น์ผ์น์ฐ์ฐ์('!===')๋ผ๋ ๊ฒ๋ ์กด์ฌํฉ๋๋ค.
console.log(10 == '10'); // ๐ ture console.log(10 === '10'); // ๐ false console.log(10 === 10); // ๐ ture console.log(0 == false); // ๐ true console.log('' == false); // ๐ true console.log( 0 === false ); // ๐ false
'null'๊ณผ 'undefined'๋ ๋ชจ๋ '๊ฐ์ด ์์'์ ์๋ฏธ ๊ฐ์ง๊ณ , 'null'์ Null ํ์
์ ์ ์ผํ ๊ฐ์ด๊ณ , 'undefined' ์ญ์ Undefined ํ์
์ ์ ์ผํ ๊ฐ์
๋๋ค.
๋จ, 'null'์ ์๋์ ์ผ๋ก ๊ฐ์ด ์์์ ๋ํ๋ผ ๋ ์ฌ์ฉํ์ง๋ง, 'undefined'์ ๋ณ์๊ฐ์ด ํ ๋น ์์ฒด๊ฐ ๋์ง ์์๋ค๋๊ฒ์ ์๋ฏธํฉ๋๋ค.
let testNull = null
console.log(testNull) // ๐ null
let testUndefined;
console.log(testUndefined) // ๐ undefined
console.log(typeof null) // object ๐ object๋ผ ๋์ค์ง๋ง Null ํ์
์
๋๋ค.
console.log(typeof undefined) // ๐ undefined
๋๋ฑ์ฐ์ฐ์์์ 'null'์ด ํท๊ฐ๋ฆฌ๋ ์ด์ ๋ ๋๋ฑ์ฐ์ฐ์์์ 'null'์ ๋ง๋๋ฉด ๋น๊ตํ ๋, ํ๋ณํ์ด ์ด๋ค์ง์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ 'null'์ ๋ง๋๋ฉด ๋๋ถ๋ถ false๊ฐ ๋์ฌ ์ ๋ฐ์ ์๊ฒ ์ฃ .
๋ค๋ง, ์์ธ์ ์ผ๋ก ๋๋ฑ์ฐ์ฐ์ ๋น๊ต ์, "null"์ด "undefined"์ ๋ง๋ฌ์ ๋๋ ์๋ก๋ฅผ ํน๋ณํ ์ปคํ๋ก ์ทจ๊ธํ๊ธฐ ๋๋ฌธ์ true๋ฅผ ๋ฐํํด์ค๋๋ค.
๋จ, ์ผ์น์ฐ์ฐ์๋ก ๋น๊ต๋ ๋๋ ์ญ์ ๋ฐ์ดํฐ ํ์
์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ flase๋ฅผ ๋ฐํํฉ๋๋ค.
// null vs undefined console.log( null == undefined ); // ๐ true console.log( null === undefined ); // ๐ false
๋น๊ต์ฐ์ฐ์์์๋ 'null'๋ ์ซ์๋ก ํ ๋ณํ์ ์์ผ์ค๋๋ค. 'null'์ด 0๋ณด๋ค ํฐ์ง ๋น๊ตํ๋ฉด false๋ฅผ ๋ฐํํ๊ฒ ์ฃ .
๋จ, ๋๋ฑ์ฐ์ฐ์์ 'null'์ด ์กด์ฌํ๋ฉด ์ญ์ ํ๋ณํ์ด ์ด๋ค์ง์ง ์๊ธฐ ๋๋ฌธ์ false์
๋๋ค.
// null vs 0 console.log( null > 0 ); // ๐ false -> null์ด ์ซ์ํ 0์ผ๋ก ๋ฐํ๋๊ธฐ ๋๋ฌธ์ ํฌ์ง ์์ console.log( null == 0 ); // ๐ false -> ๋๋ฑ์ฐ์ฐ์์์ null์ ๋ง๋๋๋ ํ๋ณํ ์์ด๋ค์ง(์์ธ) console.log( null >= 0 ); // ๐ true -> ๋น๊ต์ฐ์ฐ์์์๋ null์ด ์ซ์ํ 0์ผ๋ก ๋ฐํ๋๊ธฐ ๋๋ฌธ์ true
'undefined'๋ ๋น๊ต์ฐ์ฐ์๋ก ๋น๊ตํ ๊ฒฝ์ฐ, Nan์ผ๋ก ํ๋ณํ์ด ๋์ด ๋น๊ต๊ฐ ๋ฉ๋๋ค. ์ซ์์ ๋น๊ตํ๋ฉด Nan์ ์ซ์๊ฐ ์๋๊ธฐ ๋๋ฌธ์ false๋ฅผ ๋ฐํํฉ๋๋ค.
// undefined vs 0 alert( undefined > 0 ); // ๐ false -> undefined ์ซ์ํ์ผ๋ก ํ๋ณํ๋๋ฉด NaN์ด๊ธฐ ๋๋ฌธ alert( undefined < 0 ); // ๐ false -> undefined ์ซ์ํ์ผ๋ก ํ๋ณํ๋๋ฉด NaN์ด๊ธฐ ๋๋ฌธ alert( undefined == 0 ); // ๐ false -> ํ๋ณํ ๋์ง ์์. ์ฆ, undefined๋ null ๋๋ undefined๋๋ง ๊ฐ์