ํ๋ ์ด์์ ํํ์์ ์ฐ์ , ํ ๋น, ๋น๊ต, ๋ ผ๋ฆฌ, ํ์ , ์ง์ ์ฐ์ฐ ๋ฑ์ ์ํํ์ฌ ํ๋์ ๊ฐ์ผ๋ก ๋ง๋๋ ํ์์ ๋๋ค. ์ฝ๋์ ํต์ฌ์ด๋ ์ ์์๋๊น์?
์ฐ์์ ๋์์ ํผ์ฐ์ฐ์(operand)์ด๋ฉฐ, ๊ฐ์ผ๋ก ํ๊ฐ๋ ์ ์๋ ํํ์์ด์ด์ผ ํฉ๋๋ค.
์ฐ์ฐ์๋ ํผ์ฐ์ฐ์๋ฅผ ์ฐ์ฐํด ์๋ก์ด ๊ฐ์ ๋ง๋๋ ์ญํ ์ ๋๋ค. ์ฐ์ฐ์์ ์ข ๋ฅ๋ณ๋ก ์์๋์ด์ผ ํ ๋ด์ฉ์ ์ง์ด๋ณด์ฃ .
์ํ์ ๊ณ์ฐ์ ์ํํ์ฌ ์๋ก์ด
์ซ์
๊ฐ์ ๋ง๋ญ๋๋ค. ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐNaN
์ ๋ฐํํฉ๋๋ค.
ํผ์ฐ์ฐ์์ ๊ฐ์์ ๋ฐ๋ผ ์ดํญ, ๋จํญ ์ฐ์ ์ฐ์ฐ์๋ก ๊ตฌ๋ถ๋ฉ๋๋ค.
-
์ดํญ ์ฐ์ ์ฐ์ฐ์ : ํผ์ฐ์ฐ์์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ถ์ ํจ๊ณผ(side effect)๊ฐ ์์ต๋๋ค. ํญ์ ์๋ก์ด ๊ฐ์ ๋ง๋ค ๋ฟ์ด์ฃ .
const a = 5; const b = 2; console.log(5 + 2); // ๋ง์ , 7 ๋ฐํ console.log(5 - 2); // ๋บ์ , 3 ๋ฐํ console.log(5 * 2); // ๊ณฑ์ , 10 ๋ฐํ console.log(5 / 2); // ๋ชซ ์ฐ์ฐ, 2.5 ๋ฐํ console.log(5 % 2); // ๋๋จธ์ง ์ฐ์ฐ, 1 ๋ฐํ
-
๋จํญ ์ฐ์ ์ฐ์ฐ์ : ํผ์ฐ์ฐ์ ํ ๊ฐ๋ฅผ ์ฐ์ ์ฐ์ฐํ์ฌ ์ซ์ ๊ฐ์ ๋ง๋ญ๋๋ค.
/* * ++ : ์ฆ๊ฐ, ํผ์ฐ์ฐ์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ถ์ํจ๊ณผ(์๋ฌต์ ํ ๋น)๊ฐ ์ผ์ด๋ฉ๋๋ค. * -- : ๊ฐ์, ํผ์ฐ์ฐ์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ถ์ํจ๊ณผ(์๋ฌต์ ํ ๋น)๊ฐ ์ผ์ด๋ฉ๋๋ค. */ // ์ ํ ๋น, ํ์ฆ๊ฐ(postfix increment operator) let a = 0, result = 0; result = x++; console.log(result, x); // 0 1 // ์ ์ฆ๊ฐ, ํํ ๋น(prefix increment operator) x = 0, result; result = ++x; console.log(result, x); // 1 1 // ์ ํ ๋น, ํ๊ฐ์(postfix decrement operator) x = 0, result; result = x--; console.log(result, x); // 0 -1 // ์ ๊ฐ์, ํํ ๋น(prefix decrement operator) x = 0, result; result = --x; console.log(result, x); // -1 -1 /* * + : ๋ค๋ฅธ ํ์ ์ด๋ผ๋ฉด ์ซ์ ํ์ ์ผ๋ก ๋ฐํํ ๊ฐ์ ์์ฑํ์ฌ ๋ฐํํฉ๋๋ค. * - : ์ซ์ ํ์ ์๋ ๋ถํธ ๋ฐ์ , ๋ค๋ฅธ ํ์ ์๋ ๋ถํธ๋ฅผ ๋ฐ์ ํ ์ซ์ ํ์ ์ผ๋ก ๋ฐํํฉ๋๋ค. */ // (+) ์ซ์ ํ์ ์ ์ฌ์ฉ let a = 10; console.log(+a); // 10 console.log(+(-a)); // -10 // (+) ๋ฌธ์์ด ํ์ ์ ์ฌ์ฉ let b = '10'; console.log(+10); // 10 b = 'Hi'; console.log(+b); // NaN // (+) ๋ถ๋ฆฌ์ธ ํ์ ์ ์ฌ์ฉ b = true; console.log(+b); // 1 b = false; console.log(+b); // 0 // (-) ์ซ์ ํ์ ์ ์ฌ์ฉ a = 10; console.log(-a); // -10 console.log(-(-a)); // 10 // (-) ๋ฌธ์์ด ํ์ ์ ์ฌ์ฉ b = '10'; console.log(-10); // -10 b = 'Hi'; console.log(-b); // NaN // (-) ๋ถ๋ฆฌ์ธ ํ์ ์ ์ฌ์ฉ b = true; console.log(-b); // -1 b = false; console.log(-b); // -0, 0์ผ๋ก ํ์ ๋ณํ
-
๋ฌธ์์ด ์ฐ๊ฒฐ ์ฐ์ฐ์ : + ์ฐ์ฐ์๋ ํผ์ฐ์ฐ์ ์ค ํ๋ ์ด์์ด ๋ฌธ์์ด์ด๋ผ๋ฉด ๋ฌธ์ฅ ์ฐ๊ฒฐ ์ฐ์ฐ์๋ก ๋์ํฉ๋๋ค. ๊ทธ ์ธ๋ ์ฐ์ ์ฐ์ฐ์๋ก ๋์ํฉ๋๋ค.
let a = '1'; console.log(a + 2); // '12' console.log(2 + a); // '21' a = 1; console.log(a + true); // 2, 1๋ก ํ์ ๋ณํ console.log(a + false); // 1, 0์ผ๋ก ํ์ ๋ณํ console.log(a + null); // 1, 0์ผ๋ก ํ์ ๋ณํ console.log(a + undefined); // NaN, ํ์ ๋ณํ X
- ์ด ์ฝ๋๋ฅผ ๋ณด๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ด๋ป๊ฒ ์๋ฌต์ ์ผ๋ก ํ์
์ ์๋ ๋ณํํ๋์ง ์ ์ ์์ต๋๋ค.
- ์ด๋ฅผ ๊ฐ์ ๋ณํ(Type Coercion)์ด๋ผ๊ณ ๋ ํฉ๋๋ค. ์๋จ์ ๋จํญ ์ฐ์ฐ์๋ ์๋ฌต์ ํ์ ๋ณํ์ด ๋ฐ์ํ ๊ฒ์ ๋๋ค!
- ์ด ์ฝ๋๋ฅผ ๋ณด๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ด ์ด๋ป๊ฒ ์๋ฌต์ ์ผ๋ก ํ์
์ ์๋ ๋ณํํ๋์ง ์ ์ ์์ต๋๋ค.
ํผ์ฐ์ฐ์์ ํ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ์ขํญ์ ๋ณ์์ ํ ๋นํฉ๋๋ค.
a = 0
์ฒ๋ผ ์ขํญ ๋ณ์์ ๊ฐ์ ํ ๋นํ๋ ๊ฒ์ด ํ ๋น ์ฐ์ฐ์์
๋๋ค. ๋น์ฐํ ๋ถ์ ํจ๊ณผ๊ฐ ์กด์ฌํ๊ฒ ์ฃ ? ์ข
๋ฅ๋ ๋ฌด์์ด ์์๊น์?
-
์ซ์ ํ์ ์ ๋ํ ํ ๋น : ์ฐ์ ์ฐ์ฐ
let a; a = 10; a += 10; a -= 10; a *= 10; a /= 10; a %= 10;
-
๋ฌธ์์ด ํ์ ์ ๋ํ ํ ๋น : ๋ฌธ์์ด ์ฐ๊ฒฐ ์ฐ์ฐ
let a = 'S'; a += 'tring';
๊ฒฐ๊ณผ๋ ์ง์ ํ์ธํด๋ณด์ธ์. ์ดํด๋ฅผ ํ์๋ก ํ๋ ๋ด์ฉ์ด ์๋๋ฏ๋ก ๊ฐ๋ตํ๊ฒ ๋์ด๊ฐ๋๋ค.
ํ ๋น ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ํ ๋น๋ฌธ์ ๊ฐ์ฅ ํ์ํ ๋ด์ฉ์ ํํ์๊ณผ ๋ฌธ
์
๋๋ค. ์ฆ, ํ ๋น๋ฌธ์ ๊ฐ์ผ๋ก ํ๊ฐ๋๋ ํํ์์ธ ๋ฌธ์ผ๋ก ํ ๋น๋ ๊ฐ์ผ๋ก ํ๊ฐ ๋๋ ๋ฌธ์
๋๋ค. ์ด ํน์ง์ ์ด์ฉํด์ ์๋๊ณผ ๊ฐ์ ์ฐ์ฐ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ์ฐ์ ํ ๋นํ๊ธฐ
let a, b, c; a = b = c = 10; console.log(a, b, c); // 10 10 10
์ขํญ๊ณผ ์ฐํญ์ ํผ์ฐ์ฐ์๋ฅผ ๋น๊ตํ์ฌ ๋ถ๋ฆฌ์ธ ๊ฐ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
์ ์ด๋ฌธ์ด๋ ์กฐ๊ฑด์์์ ์์ฃผ ์ฌ์ฉํ๋ ์ฐ์ฐ์ ๋๋ค. ์ข ๋ฅ๋ฅผ ์์๋ด ๋๋ค.
-
๋๋ฑ/์ผ์น ๋น๊ต ์ฐ์ฐ์
- ๋๋ฑ ๋น๊ต : ๊ฐ๋ง์ ๋น๊ตํ๋ฉฐ, == ๋ ๊ธ์ , != ๋ ๋ถ์ ์
๋๋ค.
x == y
,x != y
- ๋๋ฑ ๋น๊ต ์ฐ์ฐ์๋ ์ขํญ, ์ฐํญ์ ํผ์ฐ์ฐ์๋ฅผ ๋น๊ตํ๊ธฐ ์ ์ ์๋ฌต์ ํ์ ๋ณํ์ ํตํด ํ์ ์ ์ผ์น์ํค๊ณ ๊ฐ์ ๋น๊ตํฉ๋๋ค. ์ฆ, '1' == 1์ด true๊ฐ ๋ ์ ์๋ค๋ ์๋ฏธ์ด๋ฏ๋ก, ๊ฐ์ ๋น๊ตํ ๋๋ ์ต๋ํ ์ผ์น ๋น๊ต ์ฐ์ฐ์๋ฅผ ์ฌ์ฉ ํฉ๋๋ค.
- ์ผ์น ๋น๊ต : ๊ฐ๊ณผ ํ์
์ ๋น๊ตํ๋ฉฐ === ๋ ๊ธ์ , !== ๋ ๋ถ์ ์
๋๋ค.
x === y
,x !== y
- ์ผ์น ๋น๊ต ์ฐ์ฐ์๋ ์ขํญ, ์ฐํญ์ ํผ์ฐ์ฐ์๊ฐ ๊ฐ๊ณผ ํ์
์ด ๊ฐ์ ๋์๋ง ๋น๊ต์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
- ์์ธ์ ์ผ๋ก NaN === NaN์ false๋ก์ NaN์ ํน์ฑ ๋๋ฌธ์ ์ด๋ฐ ํ์์ด ๋ฐ์ํ๋ ๊ฒ์์ ์์๋์ธ์.
- ES6์์ ์ถ๊ฐ๋
Object.is
๋ฉ์๋๋ ์ ํํ ๋น๊ต ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.0 == -0; // true 0 === -0; // true Object.is(0, -0); // false NaN === NaN; // false Object.is(NaN, NaN); // true
- ๋๋ฑ ๋น๊ต : ๊ฐ๋ง์ ๋น๊ตํ๋ฉฐ, == ๋ ๊ธ์ , != ๋ ๋ถ์ ์
๋๋ค.
-
๋์ ๊ด๊ณ ๋น๊ต ์ฐ์ฐ์ : ์ขํญ๊ณผ ์ฐํญ์ ๊ธฐ์ค์ผ๋ก ์ด์(>=), ์ดํ(<=), ์ด๊ณผ(>), ๋ฏธ๋ง(<)์ ๋น๊ตํ๋ ์ฐ์ฐ์ ๋๋ค.
์กฐ๊ฑด์์ ํ๊ฐ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๋ฐํํ ๊ฐ์ ๊ฒฐ์ ํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ ์ผํ ์ผํญ ์ฐ์ฐ์์ ๋๋ค.
function isString(a){
// ์กฐ๊ฑด์์ผ๋ก ํ๋ฉด
if(typeof a === 'string') return true;
else return false;
// ์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์๋ก ํ๋ฉด
return typeof a === 'string' ? true : false;
}
์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์ ํํ์์ ๊ฐ์ผ๋ก ํ๊ฐํ ์ ์๋ ํํ์์ธ ๋ฌธ์ด๋ฏ๋ก, ๊ฐ์ฒ๋ผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ขํญ๊ณผ ์ฐํญ์ ํผ์ฐ์ฐ์๋ฅผ ๋ ผ๋ฆฌ ์ฐ์ฐํฉ๋๋ค. ๋ถ์ ๋ ผ๋ฆฌ ์ฐ์ฐ์์ ๊ฒฝ์ฐ ์ฐํญ์ด ๋์์ ๋๋ค.
let a = true;
console.log(a && true);
console.log(a || false);
console.log(!a);
-
ํผ์ฐ์ฐ์๊ฐ ๋ถ๋ฆฌ์ธ ํ์ ์ด ์๋ ๊ฒฝ์ฐ์ ์์ธ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ์๋ฌต์ ํ์ ๋ณํ์ผ๋ก ๋ค๋ฅธ ํ์ ์ ์ด๋ป๊ฒ ํํํ๋์ง ์์๋์ธ์.
let a = 0; console.log(!a); // true a = 'Hi'; console.log(!a); // false
-
๋๋ชจ๋ฅด๊ฐ์ ๋ฒ์น์ ํ์ฉํ๋ฉด ๊ฐ๋ ์ฑ์ ์ข ๋ ๋์ผ ์ ์์ต๋๋ค. ์๋์ฒ๋ผ ๋ง์ด์ฃ .
!(a || b) === (!a && !b) !(a && b) === (!a || !b)
๋
ผ๋ฆฌ ์ฐ์ฐ์์์ ๋ค๋ฃจ๊ธฐ ํ๋ ๋จ์ถ ํ๊ฐ
๋ผ๋ ๋ด์ฉ์ด ์์ต๋๋ค. ์ด ํญ๋ชฉ์ ์๋์์ ์์ธํ ์ดํด๋ด
๋๋ค.
์ผ์ชฝ ํผ์ฐ์ฐ์๋ถํฐ ์ฐจ๋ก๋๋ก ํ๊ฐํ ํ ๋ง์ง๋ง ํผ์ฐ์ฐ์ ํ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค.
let a, b, c;
a = 1, b = 2, c = 3; // 3
console.log(a = 4, b = 5, c = 6); // 4 5 6
์๊ดํธ(
()
)๋ก ํผ์ฐ์ฐ์๋ฅผ ๊ฐ์ธ ์ฐ์ฐ ์ฐ์ ์์๋ฅผ ๊ฐ์ฅ ๋๊ฒ ํ๊ฐํฉ๋๋ค.
ํผ์ฐ์ฐ์์ ๋ฐ์ดํฐ ํ์ ์ ๋ฌธ์์ด๋ก ๋ฐํํฉ๋๋ค.
typeof ์ฐ์ฐ์๊ฐ ๋ฐํํ๋ ๊ฒฐ๊ณผ๋ ์ด 7๊ฐ์ง('string', 'number', 'boolean', 'undefined', 'symbol', 'object', 'function')์ ๋๋ค.
์ฃผ์์ฌํญ์ ์ดํด๋ณด๋๋ก ํ์ฃ .
- null์ ๋ฐํํ๋ ๊ฒฝ์ฐ๋ ์กด์ฌํ์ง ์์ผ๋ฉฐ, null์ ๋น๊ตํ๋ฉด 'object'๋ฅผ ๋ฐํํฉ๋๋ค. ์ฆ ์ผ์น ์ฐ์ฐ์๋ก null ํ์ ์ ํ์ธํด์ผ ํฉ๋๋ค.
let a = null;
console.log(typeof a === null); // false
console.log(a === null); // true
- ์ ์ธํ์ง ์์ ์๋ณ์๋ฅผ typeof๋ก ์ฐ์ฐํ๋ฉด ReferenceError๊ฐ ์๋ undefined๊ฐ ๋ฐ์ํฉ๋๋ค.
typeof a; // undefined
ES7์ ๋์ ๋์์ต๋๋ค. ์ขํญ์ ํผ์ฐ์ฐ์๊ฐ ๋ฐ(base), ์ฐํญ์ ํผ์ฐ์ฐ์๊ฐ ์ง์(exponent)๋ก ๊ฑฐ๋ญ ์ ๊ณฑํ์ฌ ์ซ์ ๊ฐ์ ๋ฐํํฉ๋๋ค.
์ง์ ์ฐ์ฐ์๋ ์ดํญ ์ฐ์ฐ์ ์ค ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ผ๋ฉฐ, ํ ๋น ์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค.
-
๋์ ์ด์ : Math ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ pow ๋ฉ์๋๋ฅผ ํ์ฉํ์ต๋๋ค.
Math.pow(2, 2); // 4 Math.pow(2, 3); // 8
-
๋์ ์ดํ :
**
๋ฅผ ์ฌ์ฉํฉ๋๋ค.2 ** 2; // 4 2 ** 3; // 8 // ์์ ๊ฑฐ๋ญ์ ๊ณฑ ์ ๊ทธ๋ฃน ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. -5 ** 2; // SyntaxError (-5) ** 2; // 25
๊ทธ ์ธ, ์ฐ์ฐ์ ์ฐ์ ์์๋ ์ดํด์ ์๊ธฐ๊ฐ ์๋๋๋ค. ์ฐธ์กฐ๋ฅผ ์์ฃผ ํด๋ณด์ธ์. ์๋์ ๋งํฌ๋ฅผ ์ค๋นํด๋์์ต๋๋ค.
์ฐ์ฐ์ ์ฐ์ ์์ Link
๋ ผ๋ฆฌ ์ฐ์ฐ์๋ฅผ ์ข ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋จ์ถ ํ๊ฐ์ ๋ํด ์์๋ด ๋๋ค.
๋ค์ด๊ฐ๊ธฐ์ ์์ : ์ด ๋ด์ฉ์
์๋ฌต์ ํ์ ๋ณํ
๊ณผ ๊ด๋ จ์ด ์์ผ๋ฏ๋ก, ํ์ ๋ณํ์ ์ดํดํ์ ๋ค์ ์งํํ ์ ์์ต๋๋ค. ํด๋น ์ง์์ด ๋ถ์กฑํ๋ค๊ณ ๋๋ผ์๋ฉด ์ฌ๊ธฐ์์ ๋ค์ ํ ๋ฒ ์ฝ์ด๋ณผ๊น์?
๋ ผ๋ฆฌ๊ณฑ(&&)
๊ณผ๋ ผ๋ฆฌํฉ(||)
๋ฑ์ ์ฐ์ฐ์๋ก ํํ์์ ํ๊ฐ ๊ฒฐ๊ณผ๋ฅผ ๋จ์ถํ์ฌ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
๋ ผ๋ฆฌํฉ, ๋ ผ๋ฆฌ๊ณฑ ์ฐ์ฐ์ ํํ์์ ํ๊ฐ ๊ฒฐ๊ณผ๋ ๋ถ๋ฆฌ์ธ ๊ฐ์ด ์๋ ์ ์์ต๋๋ค. ์ธ์ ๋ ๋ ๊ฐ์ ํผ์ฐ์ฐ์ ์ค ์ด๋ ํ ์ชฝ์ผ๋ก ํ๊ฐ๋ ๋ฟ์ด์ฃ .
๋ ผ๋ฆฌ๊ณฑ
์ฐ์ฐ์๋ ์ขํญ์์ ์ฐํญ์ผ๋ก ํ๊ฐํ๋ฉฐ, ๋ ๊ฐ์ ํผ์ฐ์ฐ์๊ฐ ๋ชจ๋ true์ผ ๋ true๋ฅผ ๋ฐํํฉ๋๋ค.๋ ผ๋ฆฌํฉ
์ฐ์ฐ์๋ ์ขํญ์์ ์ฐํญ์ผ๋ก ํ๊ฐํ์ง๋ง, ํ๋๋ง true์ผ ๋ true๋ฅผ ๋ฐํํฉ๋๋ค.
์ด์ฒ๋ผ ๋
ผ๋ฆฌ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ฅผ ํผ์ฐ์ฐ์๋ฅผ ํ์
๋ณํํ์ง ์๊ณ ๊ทธ๋๋ก ๋ฐํํฉ๋๋ค. ์ด๊ฒ์ ๋จ์ถ ํ๊ฐ๋ผ๊ณ ํฉ๋๋ค. ์์ธํ ๋งํ์๋ฉด, ํํ์์ ํ๊ฐํ๋ ๋์ค ํ๊ฐ ๊ฒฐ๊ณผ๊ฐ ํ์ ๋๋ฉด ๋๋จธ์ง ํ๊ฐ ๊ณผ์ ์ ์๋ต
ํ๋ ๊ฒ์
๋๋ค. ๊ท์น์ ์๋์ ๊ฐ์์.
ํํ์ | ๊ฒฐ๊ณผ |
---|---|
true || anything | true |
false || anything | anything |
true && anything | anything |
false && anything | false |
์์ ๋ฅผ ํตํด ์ดํด๋ณผ๊น์?
-
if๋ฌธ์ ๋จ์ถ ํ๊ฐ๋ก ๋์ฒดํ๊ธฐ
// ๋ ผ๋ฆฌ๊ณฑ let complete = true; let message = ''; // if๋ฌธ : if(complete) message = '์๋ฃ'; // 1๋ฒ // ๋จ์ถ ํ๊ฐ : message = complete && '์๋ฃ'; // 2๋ฒ // ๋ ผ๋ฆฌํฉ complete = false; message = ''; // if๋ฌธ : if(!complete) message = '๋ฏธ์๋ฃ' // 1๋ฒ // ๋จ์ถ ํ๊ฐ : message = !complete || '๋ฏธ์๋ฃ'; // 2๋ฒ
- 1๋ฒ๊ณผ 2๋ฒ์ ๋์ผํ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
-
๊ฐ์ฒด์ null, undefined ํ์ธ๊ณผ ํ๋กํผํฐ ์ฐธ์กฐ๋ฅผ ๋จ์ถ ํ๊ฐ๋ก ๋์ฒดํ๊ธฐ
const elem = null; // ๊ฐ์ฒด ํ๋กํผํฐ ์ง์ ์ฐธ์กฐ : console.log(elem.value); // 1๋ฒ // ๊ฒฐ๊ณผ : TypeError: Cannot read property 'value' of null // ๋จ์ถ ํ๊ฐ : console.log(elem && elem.value); // 2๋ฒ // ๊ฒฐ๊ณผ : null
- 1๋ฒ๊ณผ 2๋ฒ์ ๋์ผํ ๊ธฐ๋ฅ์ ํ์ง๋ง, 2๋ฒ์ ์๋ฌ๋ฅผ ๋ฐ์์ํค์ง ์์ต๋๋ค.
-
๋จ์ถ ํ๊ฐ๋ก ํจ์ ๋งค๊ฐ๋ณ์์ ๊ธฐ๋ณธ ๊ฐ ์ค์ ํ๊ธฐ
- ํจ์ ํธ์ถ ์ ์ธ์๋ฅผ ์ ๋ฌํ์ง ์์ผ๋ฉด ๋งค๊ฐ๋ณ์์ undefined๊ฐ ํ ๋น ๋๋๋ฐ, ๋จ์ถ ํ๊ฐ๋ฅผ ์ด์ฉํ์ฌ ๊ธฐ๋ณธ ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
// ES5, 1๋ฒ function getStringLength(str) { str = str || ''; return str.length; } getStringLength(); // 0 getStringLength('hi'); // 2 // ES6, 2๋ฒ function getStringLength(str = '') { return str.length; } getStringLength(); // 0 getStringLength('hi'); // 2
- 1๋ฒ๊ณผ 2๋ฒ์ ๋์ผํ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
- ํจ์ ํธ์ถ ์ ์ธ์๋ฅผ ์ ๋ฌํ์ง ์์ผ๋ฉด ๋งค๊ฐ๋ณ์์ undefined๊ฐ ํ ๋น ๋๋๋ฐ, ๋จ์ถ ํ๊ฐ๋ฅผ ์ด์ฉํ์ฌ ๊ธฐ๋ณธ ๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
ES11์์ ๋์ ๋์์ต๋๋ค.
?.
๋ฅผ ํตํด ํํํฉ๋๋ค.
์ขํญ์ ํผ์ฐ์ฐ์๊ฐ null/undefined์ธ ๊ฒฝ์ฐ undefined๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฐํญ์ ํ๋กํผํฐ ์ฐธ์กฐ๋ฅผ ์ด์ด๊ฐ๋๋ค.
๋ ผ๋ฆฌ ์ฐ์ฐ์๋ฅผ ํ์ฉํ ๋จ์ถ ํ๊ฐ์๋ ๋ญ๊ฐ ๋ค๋ฅธ์ง ๋น๊ตํด๋ณผ๊น์?
// ๊ฐ์ฒด ํ๋กํผํฐ ์ฐธ์กฐ
const elem = null;
// ๋
ผ๋ฆฌ ์ฐ์ฐ์ :
let value = elem && elem.value; // null
// ์ต์
๋ ์ฒด์ด๋ ์ฐ์ฐ์ :
value = elem?.value; // undefined
// ์์ธ ์ํฉ
const str = '';
const length = str && str.length; // ''
length = str?.length; // 0
๋ ผ๋ฆฌ๊ณฑ(&&)
์ ํ๊ฐ ํ ์ขํญ์ ํผ์ฐ์ฐ์๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋ ๋ฐ๋ฉด,์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์(?.)
๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ณ์์ null/undefined๊ฐ ์๋์ง ํ์ธํ๊ณ ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐํฉ๋๋ค.- ์์ธ๋ ๋ญ๊น์? ๋
ผ๋ฆฌ ์ฐ์ฐ์๋ก๋ ๋ณ์
str
์ ๋ฌธ์์ด์์๋length
ํ๋กํผํฐ ์ฐธ์กฐ๋ฅผ ํ์ง ๋ชปํฉ๋๋ค. ์์ ๊ฐ์ ๋ํ ๋ํผ ๊ฐ์ฒด(Wraper Object)์ ํน์ฑ ๋๋ฌธ์(๋์ค์ ์์ธํ ๋ค๋ฃน๋๋ค) Falsy Value๋ก ํ๋จํ์ฌ ์ขํญ์ ํผ์ฐ์ฐ์๋ฅผ ๊ทธ๋๋ก ์ถ๋ ฅํ๋ ๋ฐ๋ฉด, ์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์๋ null/undefined๋ฅผ ๊ฒ์ฌํ๊ธฐ ๋๋ฌธ์ ์ฐํญ์ ํ๋กํผํฐ ์ฐธ์กฐ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
ES11์์ ๋์ ๋์์ต๋๋ค.
??
๋ฅผ ํตํด ํํํฉ๋๋ค.
์ขํญ์ ํผ์ฐ์ฐ์๊ฐ null/undefined์ธ ๊ฒฝ์ฐ ์ฐํญ์ ํผ์ฐ์ฐ์๋ฅผ ๋ฐํํ๊ณ , ์๋๋ผ๋ฉด ์ขํญ์ ํผ์ฐ์ฐ์๋ฅผ ๋ฐํํฉ๋๋ค.
์ผํ ๋
ผ๋ฆฌํฉ(||)
๊ณผ ๋น์ทํด๋ณด์ด๋ค์. ์์ธํ ์์๋ณผ๊น์?
// null ๋ณํฉ ์ฐ์ฐ์ :
let str = null ?? 'string value'; // 'string value'
// ๋
ผ๋ฆฌ ์ฐ์ฐ์ :
str = '' || 'string value'; // 'string value'
// ์์ธ ์ํฉ
str = '' ?? 'string value'; // ''
- ์ต์
๋ ์ฒด์ด๋ ์ฐ์ฐ์์ ์ ์ฌํฉ๋๋ค.
๋ ผ๋ฆฌํฉ(||)
์ ์ขํญ์ ํผ์ฐ์ฐ์๊ฐ Falsy Value๋ผ๋ฉด ์ฐํญ์ ํผ์ฐ์ฐ์๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋ฌ๋ null ๋ณํฉ ์ฐ์ฐ์๋ Falsy Value๊ฐ ์๋ null/undefined๊ฐ ์๋๋ผ๋ฉด ์ขํญ์ ํผ์ฐ์ฐ์๋ฅผ ๋ฐํํฉ๋๋ค.
2021-09-11, karohani์ ์คํฐ๋ ์ค ์๋ณ๋ ์ถ๊ฐ์ ์ผ๋ก ๊ณต๋ถ๊ฐ ํ์ํ ๋ด์ฉ๋ค
- ์๋ฐ์คํฌ๋ฆฝํธ๋ง ์ ๋
์ด์ํ๊ฒ ๋น๊ตํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค๋ฅธ ์ธ์ด์์์
==
,===
๋ ์ด๋จ๊น์?
-
์ฐ๋ฆฌ๋ ๋๋ฑ ์ฐ์ฐ์(
==
)์ ์๋ฏธ๋ฅผ ์ ํ์๊ฐ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋๋ฑ์ฑ(Equality) ์ ๋ํ๋ด๋ฉฐ,๋ ๊ฐ์ฒด๊ฐ ๋์ผํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ๊ฒ(equals)
์ด๋ผ๋ ๋ป์ ๋๋ค. ๊ทธ๋ผ ์ผ์น ์ฐ์ฐ์(===
)๋ ๋ฌด์์ผ๊น์? ๋์ผ์ฑ(Identity) ์ผ๋ก์๋ ๊ฐ์ฒด๊ฐ ๊ฐ์ ๊ฐ์ฒด์ธ ๊ฒ(==)
์ ๋๋ค. -
์ฆ, ๋๋ฑ์ฑ์ ๋น๊ตํ๋ ๊ฒ์ ์ธ์คํด์ค๊ฐ ๋ค๋ฅผ ์ ์์ง๋ง ์ ์ฅ๋ ๊ฐ์ด ๊ฐ์์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค. ๋์ผ์ฑ์ ๋น๊ตํ๋ ๊ฒ์ ์ธ์คํด์ค ์์ฒด๊ฐ ๊ฐ์์ง ํ์ธํ๋ ๊ฒ์ ๋๋ค.
-
์ด๋ฌ๋ฉด ํผ๋์ด ์ต๋๋ค. ์ ํฌ๋ ์ฃผ์ ๊ฐ์ ๋น๊ตํ๋๊ฒ ์๋๋๊น์. ์ฌ๊ธฐ์ ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋ค๋ฅธ ์ธ์ด์์ ๋๋ฑ/์ผ์น๋ฅผ ๋น๊ตํ๋ ํํ๊ฐ ๋ค๋ฅด๋ค๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
-
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ ํํ ๊ฐ๊ณผ ๋ฐ์ดํฐ ํ์ ์ ๋น๊ตํฉ๋๋ค. ๋ค๋ฅธ ์ธ์ด-์๋ฅผ ๋ค์ด Java์ ๊ฒฝ์ฐ-๋ ๋์ผํ ํ์ ๊ณผ ๋์ผํ ๊ฐ์ด๋ผ๋ฉด ๋์ผํ ์ฃผ์๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด๋ฅผ ๋น๊ตํฉ๋๋ค. ์ฆ ๋ฐ์ดํฐ ์ฃผ์(ID)๋ฅผ ๊ธฐ์ค์ผ๋ก ๋น๊ต ์ฐ์ฐ์ ์ํํ๊ฒ ๋๋ ๊ฒ์ด์ฃ !
-
์ฐธ์กฐ Link