๐ Chapter 5 : ๋ฌธ๋ฒ
Table of Contents
๐ฏ ๋ฌธ๊ณผ ํํ์โ
- ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์์ ๋ฌธ(Statement)์ ๋ฌธ์ฅ(Sentence), ํํ์(Expression)์ ์ด๊ตฌ(Phrase), ์ฐ์ฐ์๋ ๊ตฌ๋์ /์ ์์ฌ์ ํด๋น๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ชจ๋ ํํ์์ ๋จ์ผํ, ํน์ ํ ๊ฒฐ๊ด๊ฐ์ผ๋ก ๊ณ์ฐ๋๋ค.
var a = 3 * 6;
var b = a;
b;
- ์ฌ๊ธฐ์
3 * 6
์ ํํ์์ด๋ค. ๋ ๋ฒ์งธ ์ค ์ญ์ ํํ์์ด๋ฉฐ, ์ธ ๋ฒ์งธ ์ค b๋ ํํ์์ด๋ค. - ์ด ์ธ ์ค์ ๊ฐ๊ฐ ํํ์์ด ํฌํจ๋ ๋ฌธ์ด๋ค.
- ์ฒซ ๋ฒ์งธ, ๋ ๋ฒ์งธ ๋ ๋ฌธ์ ๊ฐ๊ฐ ๋ณ์๋ฅผ ์ ์ธํ๋ฏ๋ก ์ ์ธ๋ฌธ(Declaration Statement)์ด๋ผ ํ๋ค.
- ์์
var
์ด ๋น ์งa = 3 * 6
,b = a
๋ ํ ๋น ํํ์(Assignment Expression)์ด๋ผ๊ณ ํ๋ค. - ์ธ ๋ฒ์งธ ์ค์ b๊ฐ ํํ์์ ์ ๋ถ์ด์ง๋ง ์ด๊ฒ๋ง์ผ๋ก๋ ์์ ํ ๋ฌธ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด๋ฐ ๋ฌธ์ ํํ์ ๋ฌธ(Expression Statement)์ด๋ผ๊ณ ์ผ์ปซ๋๋ค.
๐ ๋ฌธ์ ์๋ฃ ๊ฐโ
- ๋ชจ๋ ๋ฌธ์ (๊ทธ ๊ฐ์ด undefined๋ผ ํด๋) ์๋ฃ ๊ฐ์ ๊ฐ์ง๋ค.
- ES5.1. ๋ฌธ ๋์ ๋ถ์ ๋ฌธ์ ํ๊ฐ ๊ฒฐ๊ณผ๋ ํญ์ ์๋ฃ ๊ฐ์ด๋ค.
- ๋ํ, ํฌ๋กฌ์ ์ฝ์ ์ฐฝ์์ ์ต๊ทผ์ ์คํ๋ ๋ฌธ์ ์๋ฃ ๊ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ถ๋ ฅํ๊ฒ ๋์ด ์๋์ .
var b = a
๊ฐ์ ๋ฌธ์ ์๋ฃ ๊ฐ์?? ํ ๋น ํํ์b = a
๋ ํ ๋น ์ดํ์ ๊ฐ์ด ์๋ฃ ๊ฐ์ด์ง๋ง,var
๋ฌธ ์์ฒด์ ์๋ฃ ๊ฐ์undefined
๋ค. (๋ช ์ธ์ ์ ํ์์.)- ๊ทธ๋ฌ๋ ์ฝ์ ์ฐฝ์ด ๋ด์ด์ค ์๋ฃ ๊ฐ์ ๊ฐ๋ฐ์๊ฐ ๋ด๋ถ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ ์๋๋ค. ์๋ฃ ๊ฐ์ ์๊ฐ ํฌ์ฐฉํ ๋ฐฉ๋ฒ์??
- ๊ทธ ์ ์ ๋ค๋ฅธ ์ข ๋ฅ์ ๋ฌธ ์๋ฃ ๊ฐ์ ๋ณด์.
- ์๋ฅผ ๋ค์ด, ๋ณดํต์
{}
๋ธ๋ก์ ๋ด๋ถ์ ๊ฐ์ฅ ๋ง์ง๋ง ๋ฌธ/ํํ์์ ์๋ฃ ๊ฐ์ ์์ ์ ์๋ฃ ๊ฐ์ผ๋ก ๋ฐํํ๋ค.
var b;
if (true) {
b = 4 + 38;
}
- ์ฝ์ ์ฐฝ์์ ์คํํ๋ฉด 42๊ฐ ๋์ค๋๋ฐ ๋ธ๋ก ๋ด์ ๋ง์ง๋ง ๋ฌธ
b = 4 + 38
์ ์๋ฃ ๊ฐ์ด 42 ์ด๋ฏ๋กif
๋ธ๋ก์ ์๋ฃ ๊ฐ๋ 42๋ฅผ ๋ฐํํ ๊ฒ์ด๋ค. - ์ฆ, ๋ธ๋ก์ ์๋ฃ ๊ฐ์ ๋ด๋ถ์ ์๋ ๋ง์ง๋ง ๋ฌธ์ ๊ฐ์ ์์์ ์ผ๋ก ๋ฐํํ ๊ฐ์ด๋ค.
- ํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ ์ฝ๋๊ฐ ์๋ํ์ง ์๋ ๊ฑด ๋ถ๋ช ํ ๋ฌธ์ ๊ฐ ์๋ค.
var a, b;
a = if(true) {
b = 4 + 38;
}
// Uncaught SyntaxError: Unexpected token 'if'
- ๋ฌธ์ ์๋ฃ ๊ฐ์ ํฌ์ฐฉํ์ฌ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ๋ ๊ฑด ์ฌ์ด ๊ตฌ๋ฌธ/๋ฌธ๋ฒ์ผ๋ก๋ ๋ถ๊ฐ๋ฅํ๋ค.
- ์๋ฃ ๊ฐ์ ํฌ์ฐฉํ๋ ค๋ฉด ์ด์ฉ ์ ์์ด ์ ํดํจ์ ๋๋ช
์ฌ
eval()
ํจ์๋ฅผ ์ฌ์ฉํ ์๋ฐ์ ์๋ค.
var a, b;
a = eval('if (true) { b = 4 + 38; }');
a; // 42
- ES7 ๋ช
์ธ์๋
do
ํํ์์ด ์ ์๋ ์ํ์ด๋ค.
var a, b;
a = do{
if(true){
b = 4 + 38;
}
};
a; // 42๊ฐ ๋์์ผ ํ์ง๋ง ๋์ค์ง ์์ ์๋ฌ๋ธ..
do{ }
ํํ์์ ๋ธ๋ก ์คํ ํ ๋ธ๋ก ๋ด ๋ง์ง๋ง ๋ฌธ์ ์๋ฃ ๊ฐ์do
ํํ์ ์ ์ฒด์ ์๋ฃ ๊ฐ์ผ๋ก ๋ฐํํ๋ฉฐ ๊ฒฐ๊ตญ ์ด ๊ฐ์ด ๋ณ์ a์ ํ ๋น๋๋ค.eval()
์ ์ ๋ ์ฌ์ฉํ์ง ๋ง์.
๐ ํํ์์ ๋ถ์ ํจ๊ณผโ
- ๋๋ถ๋ถ์ ํํ์์๋ ๋ถ์ ํจ๊ณผ๊ฐ ์๋ค.
var a = 2;
var b = a + 3;
- ํํ์
a + 3
์์ฒด๋ ๊ฐ๋ น a ๊ฐ์ ๋ฐ๊พธ๋ ๋ฑ์ ๋ถ์ ํจ๊ณผ๊ฐ ์ ํ ์๋ค. - ๋จ์ง
b = a + 3
๋ฌธ์์ ๊ฒฐ๊ด๊ฐ 5๊ฐ b์ ํ ๋น๋ ๋ฟ์ด๋ค. - ๋ค์ ํจ์ ํธ์ถ ํํ์์ ๋ถ์ ํจ๊ณผ๋ฅผ ๊ฐ์ง ํํ์์ ์ ํ์ ์ธ ์๋ค.
function foo() {
a = a + 1;
}
var a = 1;
foo(); // undefined. a๋ 2๋ก ๋ณ๊ฒฝ
- ๋ค๋ฅธ ๋ถ์ ํจ๊ณผ๋ฅผ ์ง๋ ํํ์.
var a = 42;
var b = a++;
a; // 43
b; // 42
a++
์ด ํ๋ ์ผ์ ๋ ๊ฐ์ง๋ค.- a์ ํ์ฌ ๊ฐ 42๋ฅผ ๋ฐํํ๊ณ a๊ฐ์ 1๋งํผ ์ฆ๊ฐ์ํจ๋ค.
a++
๋ฅผ ()๋ก ๊ฐ์ธ๋ฉด ํ์ ๋ถ์ ํจ๊ณผ๋ฅผ ์บก์ํํ ์ ์๋ค๊ณ ์ฐฉ๊ฐํ ์ ์์ง๋งa++
ํํ์์์ ๋ถ์ ํจ๊ณผ ๋ฐ์ ์ดํ ์ฌํ๊ฐ๋ ์ ํํ์์ ๋ง๋ค์ด๋ด๋ ๊ฑด ๋ถ๊ฐ๋ฅํ๋ค.
var a = 42;
var b = (a++);
a; // 43
b; // 42
- ๋ฌธ์ ๋์ดํ๋(Statement-Series) ์ฝค๋ง ์ฐ์ฐ์
,
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์์ ๊ฐ๋ฐ ํํ์์ ํ๋์ ๋ฌธ์ผ๋ก ์ฐ๊ฒฐํ ์ ์๋ค.
var a = 42, b;
b = (a++, a);
a; // 43
b; // 43
a++
,a
ํํ์์ ๋ ๋ฒ์งธ a ํํ์์ ์ฒซ ๋ฒ์งธa++
ํํ์์์ ๋ถ์ ํจ๊ณผ๊ฐ ๋ฐ์ํ ์ดํ์ ํ๊ฐํ๋ค. ๊ทธ๋์ b์ ์์ 43์ด๋ค.delete
์ญ์ ๋ถ์ ํจ๊ณผ๋ฅผ ์ผ์ผํค๋ ์ฐ์ฐ์์ด๋ค.
var obj = {
a: 42
};
obj.a; // 42
delete obj.a; // true
obj.a; // undefined
- ์ด ์ฐ์ฐ์์ ๋ถ์ ํจ๊ณผ๋ ๋ฐ๋ก ํ๋กํผํฐ๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด๋ค.
var a;
a = 42; // 42
a; // 42
a = 42
์์=
์ฐ์ฐ์๋ ๋ถ์ ํจ๊ณผ์ ๋ฌด๊ดํด ๋ณด์ด์ง๋งa = 42
๋ฌธ์ ์คํ ๊ฒฐ๊ณผ๋ ์ด์ ๋ง ํ ๋น๋ ๊ฐ์ด๋ฏ๋ก 42๋ฅผ a์ ํ ๋นํ๋ ์์ฒด๊ฐ ๋ณธ์ง์ ์ผ๋ก ๋ถ์ ํจ๊ณผ์ด๋ค.- ์ด๋ ๊ฒ ํ ๋น ํํ์/๋ฌธ ์คํ ์ ํ ๋น๋ ๊ฐ์ด ์๋ฃ ๊ฐ์ด ๋๋ ์๋ ์๋ฆฌ๋ ๋ค์๊ณผ ๊ฐ์ ์ฐ์ ํ ๋น๋ฌธ(Chained Assignment) ์์ ํนํ ์ ์ฉํ๋ค.
var a, b, c;
a = b = c = 42;
- ์ ์์ ๊ฐ์ ๊ฒฝ์ฐ 42๋ฅผ c์ ํ ๋นํ๋ ๋ถ์ ํจ๊ณผ๋ฅผ ์ผ์ผํค๋ฉฐ, 42๋ฅผ b์ ํ ๋นํ๋ ๋ถ์ ํจ๊ณผ๋ฅผ ์ผ์ผํค๊ณ , 42๋ฅผ a์ ํ ๋นํ๋ ๋ถ์ ํจ๊ณผ๋ฅผ ์ผ์ผํจ๋ค.
function vowels(str) {
var matches;
if(str){
// ๋ชจ๋ ๋ชจ์์ ์ถ์ถํ๋ค.
matches = str.match(/[aeiou]/g);
if(matches){
return matches;
}
}
}
vowels('Hello World'); // ['e', 'o', 'o']
- ํ ๋น ์ฐ์ฐ์์ ๋ถ์ ํจ๊ณผ๋ฅผ ์ ํ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด 2๊ฐ์
if
๋ฌธ์ ํ๋๋ก ๊ฐ๋จํ ํฉ์น ์ ์๋ค.
function vowels(str) {
var matches;
// ๋ชจ๋ ๋ชจ์์ ์ถ์ถํ๋ค.
if(str && (matches = str.match(/[aeiou]/g))){
return matches;
}
}
vowels('Hello World'); // ['e', 'o', 'o']
๐ ์ฝํ ์คํธ ๊ท์นโ
๐ ์ค๊ดํธโ
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ์ค๊ดํ
{}
๊ฐ ๋์ฌ ๋ฒํ ๊ณณ์ ํฌ๊ฒ ๋ ๊ตฐ๋ฐ์ด๋ค.
- ๊ฐ์ฒด ๋ฆฌํฐ๋ด
var a = {
foo: bar()
};
{}
๋ a์ ํ ๋น๋ ๊ฐ์ด๋ฏ๋ก ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ด๋ค.
- ๋ ์ด๋ธ
{
foo: bar()
}
{}
๋ ์ด๋์๋ ํ ๋น๋์ง ์์, ๊ณ ๋ฆฝ๋ ๊ฐ์ฒด ๋ฆฌํฐ๋ด์ฒ๋ผ ๋ณด์ด์ง๋ง ๊ทธ๋ ์ง ์๋ค.- ์ฌ๊ธฐ์์
{}
๋ ํ๋ฒํ ์ฝ๋ ๋ธ๋ก์ด๋ค. let
๋ธ๋ก ์ค์ฝํ ์ ์ธ๊ณผ ํจ๊ป ์ฐ์ด๋ฉด ์์ฃผ ์ ์ฉํ๋ค.{}
์ฝ๋ ๋ธ๋ก์for/while
๋ฃจํ,if
์กฐ๊ฑด ๋ฑ์ ๋ถ์ด์๋ ์ฝ๋ ๋ธ๋ก๊ณผ ๊ธฐ๋ฅ์ ์ผ๋ก ๋งค์ฐ ์ ์ฌํ๋ค.- ์ด๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ ์ด๋ธ ๋ฌธ(Labeled statement) ์ด๋ผ ๋ถ๋ฅด๋, ๊ฑฐ์ ์ ์๋ ค์ง์ง ์์(๊ถ์ฅ ํ์ง ์๋๋ค.) ๊ธฐ๋ฅ ๋๋ถ์ด๋ค.
- ์ฆ,
foo
๋bar()
๋ฌธ์ ๋ ์ด๋ธ์ด๋ค. - ์๋ฐ์คํฌ๋ฆฝํธ์๋ ๋ ์ด๋ธ ์ ํ(Labeled Jump)๋ผ๋ ํน๋ณํ ํํ์
goto
์ฅ์น๊ฐ ๋์ ๋ง๋ จ๋์ด ์๋ค. continue
์break
๋ฌธ์ ์ ํ์ ์ผ๋ก ์ด๋ค ๋ ์ด๋ธ์ ๋ฐ์goto
์ฒ๋ผ ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ์ ์ ํ์ํจ๋ค.
foo: for(var i = 0; i < 4; i++) {
for(var j = 0; j < 4; j++) {
if(j == i) {
// ๋ค์ ์ํ ์ foo ๋ถ์ ๋ฃจํ๋ก ์ ํํ๋ค.
continue foo;
}
if((j * i) % 2 == 1) {
// ํ๋ฒํ, ์์ชฝ ๋ฃจํ์ continue
continue;
}
console.log(i, j);
}
}
// 1 0
// 2 0
// 2 1
// 3 0
// 3 2
continue foo
๋foo
๋ผ๋ ๋ ์ด๋ธ ์์น๋ก ์ด๋ํ์ฌ ๊ณ์ ์ํํ๋ผ๋ ์๋ฏธ๊ฐ ์๋๋ผfoo
๋ผ๋ ๋ ์ด๋ธ์ด ๋ถ์ ๋ฃจํ์ ๋ค์ ์ํ๋ฅผ ๊ณ์ํ๋ผ๋ผ๋ ๋ป์ด๋ค. ๋ฐ๋ผ์ ์ฌ์ค ์์์ ์ธgoto
์๋ ๋ค๋ฅด๋ค.break foo
๋foo
๋ผ๋ ๋ ์ด๋ธ ์์น๋ก ์ด๋ํ์ฌ ๊ณ์ ์ํํ๋ผ๋ ์๋ฏธ๊ฐ ์๋๋ผ,foo
๋ผ๋ ๋ ์ด๋ธ์ด ๋ถ์ ๋ฐ๊นฅ์ชฝ ๋ฃจํ/๋ธ๋ก ๋ฐ์ผ๋ก ๋๊ฐ ๊ทธ ์ดํ๋ถํฐ ๊ณ์ํ๋ผ๋ ๋ป์ด๋ค.- ๋ ์ด๋ธ์ ๋น ๋ฃจํ(Nonloop)๋ธ๋ก์ ์ ์ฉํ ์ ์๋๋ค, ๋จ ์ด๋ฐ ๋น ๋ฃจํ ๋ ์ด๋ธ์
break
๋ง ์ฐธ์กฐํ ์ ์๋ค. - ๋ ์ด๋ธ
break __
๋ฅผ ์จ์ ๋ ์ด๋ธ ๋ธ๋ก ๋ฐ์ผ๋ก ๋๊ฐ ์๋ ์์ง๋ง, ๋น ๋ฃจํ ๋ธ๋ก์continue __
ํ๋ค๋ ๊ฐ, ๋ ์ด๋ธ์ด ์๋break
๋ก ๋ธ๋ก์ ๋น ์ ธ๋๊ฐ๋ ๊ฑด ์ ๋๋ค.
function foo() {
bar: {
console.log('hello');
break bar;
console.log('์คํ ์ ๋๋ค.');
}
console.log('world');
}
foo();
// hello
// world
- ๋ ์ด๋ธ ๋ฃจํ/๋ธ๋ก์ ์ฌ์ฉ ๋น๋๊ฐ ๊ทนํ ๋๋ฌผ๊ณ ๋ชป๋ง๋ ํ ๊ตฌ์๋ ๋ง์ ๊ฐ๋ฅํ ํผํ๋๊ฒ ์ข๋ค.
- ์ด๋ฅผํ ๋ฉด ๋ฃจํ ์ ํ๋ฅผ ํ ๋ฐ์์ผ ์ฐจ๋ผ๋ฆฌ ํจ์ ํธ์ถ์ด ๋ ๋ซ๋ค.
- ๋ธ๋ก
[] + {}; // "[object Object]"
{} + []; // 0
- ์ ์ค์์ ์์ง์
+
์ฐ์ฐ์ ํํ์์{}
๋ฅผ ์ค์ ๊ฐ(๋น ๊ฐ์ฒด)์ผ๋ก ํด์ํ๋ค. []
๋""
๋ก ๊ฐ์ ๋ณํ๋๊ณ{}
๋ ๋ฌธ์์ด"[object Object]"
๋ก ๊ฐ์ ๋ณํ๋๋ค.- ๊ทธ๋ฌ๋ ์๋ซ ์ค์
{}
๋ ๋๋จ์ด์ง ๋น ๋ธ๋ก์ผ๋ก ๊ฐ์ฃผํ๋ค. - ๋ธ๋ก ๋์ ๊ผญ ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ๋๋์ผ ํ๋ค๋ ๋ฒ์ ์์ผ๋ฏ๋ก ๋ฌธ์ ๋ ๊ฑด ์๋ค.
- ๊ฒฐ๊ตญ
+ []
ํํ์์์ ๋ช ์์ ์ผ๋ก[]
๋ฅผ ์ซ์ 0์ผ๋ก ๊ฐ์ ๋ณํํ๋ค.
- ๊ฐ์ฒด ๋ถํด
- ES6๋ถํฐ ๋ถํด ํ ๋น(Destructuring Assignments), ๊ตฌ์ฒด์ ์ผ๋ก๋ ๊ฐ์ฒด ๋ถํด์
{}
๋ฅผ ์ฌ์ฉํ๋ค.
function getData() {
// ...
return {
a: 42,
b: 'foo',
};
}
var { a, b } = getData();
console.log(a, b); // 42 'foo'
{}
๋ฅผ ์ด์ฉํ ๊ฐ์ฒด ๋ถํด๋ ๋ช ๋ช ๋ ํจ์์๋ ํ์ฉํ ์ ์๋๋ฐ, ์ด๋ฅผํ ๋ฉด ์์์ ์ธ ๊ฐ์ฒด ํ๋กํผํฐ ํ ๋น๊ณผ ๋น์ทํ ๊ฐํธ ๊ตฌ๋ฌธ์ด๋ค.
function foo({a, b, c}) {
// ๋ค์ ์ฝ๋์ฒ๋ผ ํ ํ์๊ฐ ์๋ค.
// var a = obj.a, b = obj.b, c = obj.c
console.log(a, b, c);
}
foo({
c: [1, 2, 3],
a: 42,
b: 'foo',
});
// 42 "foo" [1, 2, 3]
- else if์ ์ ํ์ ๋ธ๋ก
if (a) {
// ...
}
else if (b) {
// ...
}
else {
// ...
}
- ์ค์
else if
๊ฐ์ ๊ฑด ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์จ๊ฒจ์ง ํน์ฑ์ด๋ค. if
์else
๋ฌธ์ ์คํ๋ฌธ์ด ํ๋๋ฐ์ ์๋ ๊ฒฝ์ฐ ๋ธ๋ก์ ๊ฐ์ธ๋{}
๋ฅผ ์๋ตํด๋ ๋๋ค.
if (a) doSomething(a);
- ์ฌ๋ฌ ์คํ์ผ ๊ฐ์ด๋ ๋ฌธ์์๋ ๋จ์ผ ๋ฌธ ๋ธ๋ก๋
{}
๋ก ๊ฐ์ธ๋ผ๊ณ ์กฐ์ธํ๋ค.
if (a) { doSomething(a); }
- ๊ทธ๋ฌ๋ ์ ํํ ๋์ผํ ๋ฌธ๋ฒ ๊ท์น์ด
else
์ ์๋ ์ ์ฉ๋์ด ์ข ์ ์ ๋ดค๋ ์ฝ๋๋ ์ค์ ๋ก๋ ํญ์ ์ด๋ ๊ฒ ํ์ฑ๋๋ค.
if (a) {
// ...
}
else {
if (b) {
// ...
}
else {
// ...
}
}
- ์ฆ,
else if
๋ผ๊ณ ์ฐ๋ ๊ฑด ํ์ค ์คํ์ผ ๊ฐ์ด๋์ ์๋ฐ ์ฌ๋ก๊ฐ ๋๋ฉฐ, ๋จ์ผif
๋ฌธ๊ณผ ๊ฐ์ดelse
๋ฅผ ์ ์ํ ์ ์ด ๋๋ค. - ๋ฌผ๋ก
else if
๋ ์ด๋ฏธ ๋๊ตฌ๋ ๋ค ์ฐ๋ ๊ด์ฉ ์ฝ๋๊ณ , ํ ๋จ๊ณ ํ์๋ก ๋ค์ฌ ์ฐ๊ธฐ๋ฅผ ํ๋ ํจ๊ณผ๊ฐ ์์ด ๋๋ฆ ๋งค๋ ฅ์ ์๋ค.
๐ฏ ์ฐ์ฐ์ ์ฐ์ ์์โ
var a = 42;
var b = 'foo';
var c = [1, 2, 3];
a && b || c; // ๊ฒฐ๊ณผ๋?
a || b && c; // ๊ฒฐ๊ณผ๋?
- ๋ ํํ์์ ๊ฒฐ๊ณผ๋ฅผ ์ดํดํ๋ ค๋ฉด ํํ์์ ์ฐ์ฐ์๊ฐ ์ฌ๋ฌ ๊ฐ ์์ ๊ฒฝ์ฐ ์ด๋ค ๊ท์น์ผ๋ก ์ฒ๋ฆฌ๋๋์ง ์์์ผ ํ๋ค.
- ๋ฐ๋ก ์ด ๊ท์น์ ์ฐ์ฐ์ ์ฐ์ ์์(Operator precedence)๋ผ๊ณ ํ๋ค.
var a = 42, b;
b = (a++, a);
a; // 43
b; // 43
var a = 42, b;
b = a++, a;
a; // 43
b; // 42
- b๊ฐ์ด ๋ฐ๋ ์ด์ ๋ ์ฐ์ฐ์๊ฐ
=
์ฐ์ฐ์๋ณด๋ค ์ฐ์ ์์๊ฐ ๋ฎ๊ธฐ ๋๋ฌธ์ด๋ค. - ๊ทธ๋ฌ๋ฏ๋ก
b = a++, a
๋ฅผ ์์ง์(b = a++), a
๋ก ํด์ํ๋ค. - ์ฐ์ฐ์๋ก
,
๋ฅผ ์ฌ์ฉํ ๋์๋ ์ด ์ฐ์ฐ์์ ์ฐ์ ์์๊ฐ ์ตํ์๋ผ๋ ์ฌ์ค ๋ํ ๋ฐ๋์ ์๊ณ ์์ด์ผ ํ๋ค. ์ฆ, ์ด๋ค ์ฐ์ฐ์๋ผ๋,
๋ณด๋ค ๋จผ์ ๋ฌถ์ธ๋ค.
if (str && (matches = str.match(/[aeiou]/g))) {
// ...
}
- ํ ๋น๋ฌธ ์์ชฝ์
()
๋ก ๊ฐ์ธ์ผํ๋ค.&&
๊ฐ=
๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ผ๋ฏ๋ก()
๋ก ๋ฌถ์ด์ฃผ์ง ์์ผ๋ฉฐ ํํ์์ (str && matches) = str.match(/[aeiou]/g) ๋ก ์ฒ๋ฆฌ๋๋ค.
var a = 42;
var b = 'foo';
var c = false;
var d = a && b || c ? c || b ? a : c && b : a;
d; // 42
- ์ ์ผ ์์
(a && b || c)
๊ฐ(a && b) || c
์a && (b || c)
์ค ์ด๋ ์ชฝ์ผ๋ก ํด์๋ ๊น?
(false && true) || true; // true
false && (true || true); // false
false && true || true; // true
(false && true) || true; // true
&&
์ฐ์ฐ์๊ฐ ๋จผ์ ํ๊ฐ๋๊ณ||
์ฐ์ฐ์๊ฐ ๊ทธ ๋ค์์ ํ๊ฐ๋๋ค.
true || false && false; // true
(true || false) && false; // false
true || (false && false); // true
๐ ๋จ๋ฝ ํ๊ฐโ
&&
,||
์ฐ์ฐ์๋ ์ข์ธก ํผ์ฐ์ฐ์์ ํ๊ฐ ๊ฒฐ๊ณผ๋ง์ผ๋ก ์ ์ฒด ๊ฒฐ๊ณผ๊ฐ ์ด๋ฏธ ๊ฒฐ์ ๋ ๊ฒฝ์ฐ ์ฐ์ธก ํผ์ฐ์ฐ์์ ํ๊ฐ๋ฅผ ๊ฑด๋๋ด๋ค.- ๊ทธ๋์ ๋จ๋ฝ(Short Circuited)์ด๋ ๋ง์ด ์ ๋๋ ๊ฒ์ด๋ค.
function doSomething(opts) {
if(opts && opts.cool) {
// ...
}
}
opts && opts.cool
์์opts
๋ ์ผ์ข ์ ๊ฐ๋๋ค.- ๋ง์ฝ,
opts
๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด ๋น์ฐํopts.cool
ํํ์์ ์๋ฌ์ผ ์๋ฐ์ ์๋ค. - ์ผ๋จ
opts
๋ฅผ ๋จผ์ ๋จ๋ฝ ํ๊ฐํด๋ณด๊ณ , ๊ทธ ๊ฒฐ๊ณผ๊ฐ ์คํจ๋ฉดopts.cool
์ ์๋์ผ๋ก ๊ฑด๋๋ฐ๋ ๊ฒฐ๊ณผ์ ์ผ๋ก ์๋ฌ๋ ๋์ง ์๋๋ค. ||
๋จ๋ฝ ํ๊ฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ค.
function doSomething(opts) {
if(opts.cache || primeCache()) {
// ...
}
}
opts.cache
๋ฅผ ๋จผ์ ์ฒดํฌํด์ OK๋ฉด, ๊ตณ์ดprimeCache()
ํจ์๋ ํธ์ถํ์ง ์๊ณ ๋์ด๊ฐ ์ ์๋ค.- ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ์์ ์ด ์ค์ด๋ ๋ค.
๐ ๋๋ํ ์ฐ์ โ
- ์ผํญ ์ฐ์ฐ์
? :
๋&&
์||
๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์๊น ์๋๋ฉด ๋ฎ์๊น?
a && b || c ? c || b ? a : c && b : a