๋ณธ๋ฌธ์œผ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ธฐ

๐ŸŒˆ Chapter 5 : ๋ฌธ๋ฒ•

Table of Contents
  • ๋ฌธ๊ณผ ํ‘œํ˜„์‹ ๐Ÿ”—
    • ๋ฌธ์˜ ์™„๋ฃŒ ๊ฐ’ ๐Ÿ”—
    • ํ‘œํ˜„์‹์˜ ๋ถ€์ˆ˜ ํšจ๊ณผ ๐Ÿ”—
    • ์ฝ˜ํ…์ŠคํŠธ ๊ทœ์น™ ๐Ÿ”—
  • ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„ ๐Ÿ”—
    • ๋‹จ๋ฝ ํ‰๊ฐ€ ๐Ÿ”—
    • ๋ˆ๋ˆํ•œ ์šฐ์ • ๐Ÿ”—
    • ๋ถ„๋ช…ํžˆ ํ•˜์ž ๐Ÿ”—
  • ์„ธ๋ฏธ์ฝœ๋ก  ์ž๋™ ์‚ฝ์ž… ๐Ÿ”—
  • ์—๋Ÿฌ ๐Ÿ”—
    • ๋„ˆ๋ฌด ์ด๋ฅธ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๐Ÿ”—
  • ํ•จ์ˆ˜ ์ธ์ž ๐Ÿ”—
  • try...finally ๐Ÿ”—
  • switch ๐Ÿ”—
  • ์ •๋ฆฌํ•˜๊ธฐ ๐Ÿ”—

๐ŸŽฏ ๋ฌธ๊ณผ ํ‘œํ˜„์‹โ€‹

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์—์„œ ๋ฌธ(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']

๐Ÿ“š ์ฝ˜ํ…์ŠคํŠธ ๊ทœ์น™โ€‹

๐Ÿ“Œ ์ค‘๊ด„ํ˜ธโ€‹

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ์ค‘๊ด„ํ™” {}๊ฐ€ ๋‚˜์˜ฌ ๋ฒ•ํ•œ ๊ณณ์€ ํฌ๊ฒŒ ๋‘ ๊ตฐ๋ฐ์ด๋‹ค.
  1. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด
var a = {
foo: bar()
};
  • {}๋Š” a์— ํ• ๋‹น๋  ๊ฐ’์ด๋ฏ€๋กœ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ด๋‹ค.
  1. ๋ ˆ์ด๋ธ”
{
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
  • ๋ ˆ์ด๋ธ” ๋ฃจํ”„/๋ธ”๋ก์€ ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๊ทนํžˆ ๋“œ๋ฌผ๊ณ  ๋ชป๋งˆ๋•…ํ•œ ๊ตฌ์„๋„ ๋งŽ์•„ ๊ฐ€๋Šฅํ•œ ํ”ผํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.
  • ์ด๋ฅผํ…Œ๋ฉด ๋ฃจํ”„ ์ ํ”„๋ฅผ ํ•  ๋ฐ”์—์•ผ ์ฐจ๋ผ๋ฆฌ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ๋” ๋‚ซ๋‹ค.
  1. ๋ธ”๋ก
[] + {}; // "[object Object]"
{} + []; // 0
  • ์œ— ์ค„์—์„œ ์—”์ง„์€ + ์—ฐ์‚ฐ์ž ํ‘œํ˜„์‹์˜ {}๋ฅผ ์‹ค์ œ ๊ฐ’(๋นˆ ๊ฐ์ฒด)์œผ๋กœ ํ•ด์„ํ•œ๋‹ค.
  • []๋Š” ""๋กœ ๊ฐ•์ œ๋ณ€ํ™˜๋˜๊ณ  {}๋„ ๋ฌธ์ž์—ด "[object Object]"๋กœ ๊ฐ•์ œ๋ณ€ํ™˜๋œ๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ์•„๋žซ ์ค„์˜ {}๋Š” ๋™๋–จ์–ด์ง„ ๋นˆ ๋ธ”๋ก์œผ๋กœ ๊ฐ„์ฃผํ•œ๋‹ค.
  • ๋ธ”๋ก ๋์„ ๊ผญ ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๋๋‚˜์•ผ ํ•œ๋‹ค๋Š” ๋ฒ•์€ ์—†์œผ๋ฏ€๋กœ ๋ฌธ์ œ ๋  ๊ฑด ์—†๋‹ค.
  • ๊ฒฐ๊ตญ + []ํ‘œํ˜„์‹์—์„œ ๋ช…์‹œ์ ์œผ๋กœ []๋ฅผ ์ˆซ์ž 0์œผ๋กœ ๊ฐ•์ œ๋ณ€ํ™˜ํ•œ๋‹ค.
  1. ๊ฐ์ฒด ๋ถ„ํ•ด
  • 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]
  1. 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
  • ์ฆ‰, ๋‹ค์Œ ๋‘˜ ์ค‘์—์„œ ์–ด๋Š ์ชฝ์œผ๋กœ ์ฒ˜๋ฆฌ๋ ๊นŒ?
a && b || (c ? c || (b ? a : c) && b : a)
(a && b || c) ? (c || b) ? a : (c && b) : a
  • ์ •๋‹ต์€ ์•„๋žซ ์ค„์ด๋‹ค.
  • &&๋Š” ||๋ณด๋‹ค, ||๋Š” ? :๋ณด๋‹ค ๊ฐ๊ฐ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๋”ฐ๋ผ์„œ ํ‘œํ˜„์‹ (a && b || c)๊ฐ€ ? :๋ถ€๋‹ค ๋จผ์ € ํ‰๊ฐ€๋œ๋‹ค.

๐Ÿ“š ๊ฒฐํ•ฉ์„ฑโ€‹

  • ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„ ๊ทœ์น™์— ์˜๊ฑฐํ•˜์—ฌ &&์™€ ||๋Š” ? :๋ณด๋‹ค ๋จผ์ € ๋ฌถ์ด๋Š”๋ฐ ๋งŒ์•ฝ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋™์ผํ•œ ๋‹ค์ˆ˜์˜ ์—ฐ์‚ฐ์ž๋ผ๋ฉด ์ฒ˜๋ฆฌ ์ˆœ์„œ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?
  • ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฐ์‚ฐ์ž๋Š” ์ขŒ์ธก๋ถ€ํ„ฐ ๊ทธ๋ฃนํ•‘(Grouping)์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์šฐ์ธก๋ถ€ํ„ฐ ๊ทธ๋ฆ…ํ•‘์ด ์ผ์–ด๋‚˜๋Š”์ง€์— ๋”ฐ๋ผ ์ขŒ์ธก ๊ฒฐํ•ฉ์„ฑ(Left-Associative) ๋˜๋Š” ์šฐ์ธก ๊ฒฐํ•ฉ์„ฑ(Right-Associative) ์„ ๊ฐ€์ง„๋‹ค.
  • ์ด๊ฒƒ์ด ์ค‘์š”ํ•œ ์ด์œ ๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๊ฐ™์ด ํ‘œํ˜„์‹์ด ๋ถ€์ˆ˜ ํšจ๊ณผ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
var a = foo() && bar();
  • foo() ํ•จ์ˆ˜๋ฅผ ๋จผ์ € ํ˜ธ์ถœํ•œ ๋’ค, ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์— ๋”ฐ๋ผ bar() ํ˜ธ์ถœ ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.
  • ๋งŒ์ผ bar()๊ฐ€ foo() ์•ž์— ์žˆ๋‹ค๋ฉด ์ „ํ˜€ ๋‹ค๋ฅธ ์‹์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด ํ˜๋Ÿฌ๊ฐˆ ๊ฒƒ์ด๋‹ค.
  • foo() ํ•จ์ˆ˜๋ฅผ ๋จผ์ € ํ˜ธ์ถœ๋˜๋Š” ๊ฑด ๋‹จ์ˆœํžˆ ์ขŒ์ธก โžก ์šฐ์ธก ์ˆœ์„œ๋กœ ์ฒ˜๋ฆฌ(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ์ฒ˜๋ฆฌ ์ˆœ์„œ)๋˜๋‹ˆ ๊ทธ๋Ÿฐ ๊ฒƒ์ด์ง€ &&์˜ ๊ฒฐํ•ฉ์„ฑ์™€๋Š” ๋ฌด๊ด€ํ•œ๋‹ค.
  • && ์—ฐ์‚ฐ์ž๋Š” ํ•˜๋‚˜๋ฟ์ด๊ณ  ๊ทธ๋ฃนํ•‘์€ ์—†์œผ๋ฏ€๋กœ ๊ฒฐํ•ฉ์„ฑ์ด ๋ผ์–ด๋“ค ์—ฌ์ง€๊ฐ€ ์—†๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ a && b && c ๊ฐ™์€ ํ‘œํ˜„์‹์—์„œ๋Š” ์•”์‹œ์ ์ธ ๊ทธ๋ฃนํ•‘์ด ๋ฐœ์ƒํ•œ๋‹ค.
  • &&๋Š” ์ขŒ์ธก๋ถ€ํ„ฐ ๊ฒฐํ•ฉํ•˜๋ฏ€๋กœ (a && b) && c์™€ ๊ฐ™๋‹ค.
  • ์„ค์‚ฌ ์šฐ์ธก๋ถ€ํ„ฐ ๊ฒฐํ•ฉํ•˜์—ฌ a && (b && c)๋ผ๋„ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™๋‹ค.
  • ๋”ฐ๋ผ์„œ ์ •ํ™•ํ•œ ์ •์˜๋ฅผ ๋”ฐ์ ธ ๋ณด์ž๋Š” ์–˜๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, &&, ||์ด ์ขŒ์ธก ๊ฒฐํ•ฉ์„ฑ ์—ฐ์‚ฐ์ž๋ผ๋Š” ๊ฑด ๊ทธ๋‹ค์ง€ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค.
  • ํ•˜์ง€๋งŒ ๋ชจ๋“  ์—ฐ์‚ฐ์ž๊ฐ€ ๋‹ค ๊ทธ๋Ÿฐ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๊ฒฐํ•ฉ ๋ฐฉํ–ฅ์ด ์ขŒ/์šฐ์ธก ์–ด๋Š ์ชฝ์ธ์ง€์— ๋”ฐ๋ผ ์™„์ „ํžˆ ๋‹ค๋ฅด๊ฒŒ ์ž‘๋™ํ•˜๋Š” ์—ฐ์‚ฐ์ž๋„ ์žˆ๋‹ค.
  • ์šฐ์„  ? : ์—ฐ์‚ฐ์ž๊ฐ€ ๊ทธ๋ ‡๋‹ค.
a ? b : c ? d : e;
  • ? :์—ฐ์‚ฐ์ž๋Š” ์šฐ์ธก ๊ฒฐํ•ฉ์„ฑ ์—ฐ์‚ฐ์ž์ด๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ทธ๋ฃนํ•‘ ๋œ๋‹ค.
a ? b : (c ? d : e)
  • ์šฐ์ธก๋ถ€ํ„ฐ ๊ฒฐํ•ฉํ•˜๋ฏ€๋กœ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š”๋ฐ ์ด๋ฅผํ…Œ๋ฉด (a ? b : c) ? d : e๋Š” ๋‹ค์„ฏ ๊ฐœ ๊ฐ’๋“ค์˜ ์กฐํ•ฉ์— ๋”ฐ๋ผ ์ƒ์ดํ•˜๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.
  • =๋„ ์šฐ์ธก ๊ฒฐํ•ฉ์„ฑ ์—ฐ์‚ฐ์ž ์ค‘ ํ•˜๋‚˜๋‹ค.
var a, b, c;
a = b = c = 42;
  • a = b = c = 42๋Š” ์šฐ์ธก๋ถ€ํ„ฐ ๊ฒฐํ•ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ์—”์ง„์€ a = (b = (c = 42)) ์ฒ˜๋Ÿผ ํ•ด์„ํ•œ๋‹ค.
var a = 42;
var b = 'foo';
var c = false;

var d = a && b || c ? c || b ? a : c && b : a;
  • d๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์„๋œ๋‹ค.
((a && b) || c) ? ((c || b) ? a : (c && b)) : a

๐Ÿ“š ๋ถ„๋ช…ํžˆ ํ•˜์žโ€‹

  • ์—ฐ์‚ฐ์ž ์šฐ์„ ์ˆœ์œ„/๊ฒฐํ•ฉ์„ฑ๊ณผ ์†์œผ๋กœ ()๋ฅผ ๊ฐ์‹ธ ์ฃผ๋Š” ๋‘ ๋ฐฉ๋ฒ•์„ ์ ์ ˆํžˆ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค์–ด, (a && b && c)๋Š” ๊ทธ ์ž์ฒด๋กœ ์ตœ์„ ์ด๋ฏ€๋กœ ๊ตณ์ด ๊ฒฐํ•ฉ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์ˆœ์„œ๋ฅผ ๋ช…์‹œํ•˜๊ณ ์ž ((a && b) && c) ์ฒ˜๋Ÿผ ์“ฐ๋Š” ๊ฑด ์žฅํ™ฉํ•œ ์ฝ”๋“œ๋ฅผ ๋‚ณ์„ ๋ฟ์ด๋ฏ€๋กœ ๊ทธ๋ƒฅ ๋†”๋‘”๋‹ค.
  • ๋‘ ๊ฐœ์˜ ? : ์กฐ๊ฑด ์—ฐ์‚ฐ์ž๊ฐ€ ์ฒด์ด๋‹๋œ ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด, ์ฃผ์ € ์—†์ด ()๋กœ ๊ทธ๋ฃนํ•‘ํ•˜์—ฌ ์˜๋„ํ•œ ๋กœ์ง์„ ํ™•์‹คํžˆ ๋ฐํžŒ๋‹ค.

๐ŸŽฏ ์„ธ๋ฏธ์ฝœ๋ก  ์ž๋™ ์‚ฝ์ž…โ€‹

  • ASI(Automatic Semicolon Insertion)๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋žจ์˜ ์„ธ๋ฏธ์ฝœ๋ก ์ด ๋ˆ„๋ฝ๋œ ๊ณณ์— ์—”์ง„์ด ์ž๋™์œผ๋กœ ;๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
  • ๋‹จ ํ•˜๋‚˜์˜ ;์ด๋ผ๋„ ๋ˆ„๋ฝ๋˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋žจ์€ ๋Œ์•„๊ฐ€์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋”ฉ ์‹œ ;๋ฅผ ์•ˆ ์จ๋„ ๋  ๊ฒƒ ๊ฐ™์€ ๋ถ€๋ถ„์— ์ƒ๋žต์„ ํ•ด๋„ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ์ด์œ ๋Š” ASI ๋•๋ถ„์ด๋‹ค.
  • ๋‹จ, ASI๋Š” ์ƒˆ ์ค„์—๋งŒ ์ ์šฉ๋˜๋ฉฐ ์–ด๋– ํ•œ ๊ฒฝ์šฐ์—๋„ ์ค„ ์ค‘๊ฐ„์— ์‚ฝ์ž…๋˜๋Š” ์ผ์€ ์—†๋‹ค.
  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŒŒ์„œ๋Š” ์ค„ ๋‹จ์œ„๋กœ ํŒŒ์‹ฑ์„ ํ•˜๋‹ค๊ฐ€ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฉด ;์„ ๋„ฃ์–ด๋ณด๊ณ  ํƒ€๋‹นํ•œ ๊ฑฐ ๊ฐ™์œผ๋ฉด ;๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค.
var a = 42, b
c;
  • ์ด ๊ฒฝ์šฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ b ๋’ค์— ์•”์‹œ์ ์œผ๋กœ ;์„ ์‚ฝ์ž…ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ c;๋Š” ๋…๋ฆฝ์ ์ธ ํ‘œํ˜„์‹ ๋ฌธ์ด ๋œ๋‹ค.
var a = 42, b = 'foo';
a
b // "foo"
  • ํ‘œํ˜„์‹ ๋ฌธ์—๋„ ASI๊ฐ€ ์ ์šฉ๋˜๋ฏ€๋กœ ์—๋Ÿฌ ์—†๋Š” ์œ ํšจํ•œ ํ”„๋กœ๊ทธ๋žจ์ด๋‹ค.
var a = 42;
do {
// ...
} while(a) // ; ๋นผ๋จน์—ˆ๋‹ค!
a;
  • ์œ„ ๊ฐ™์€ ๊ฒฝ์šฐ์—์„œ๋„ ASI๋Š” ๋ผ์–ด๋“ค์–ด ์นœ์ ˆํ•˜๊ฒŒ ;๋ฅผ ๋„ฃ์–ด์ค€๋‹ค.
  • ASI๋Š” ์ฃผ๋กœ break, continue, return, yield์—๋„ ๋™์ผํ•œ ์ถ”๋ก  ๋กœ์ง์ด ์‚ฌ์šฉ๋œ๋‹ค.

๐Ÿ“š ์—๋Ÿฌ ์ •์ •โ€‹

  • ๋Œ€๋ถ€๋ถ„์˜ ์„ธ๋ฏธ์ฝœ๋ก ์€ ์„ ํƒ ์‚ฌํ•ญ์ด๋‹ค.
  • ๋ช…์„ธ์—๋Š” ASI๊ฐ€ ์—๋Ÿฌ ์ •์ •(Error Correction) ๋ฃจํ‹ด์ด๋ผ๊ณ  ์”Œ์—ฌ ์žˆ๋‹ค.
  • ์—๊ธฐ์„œ ์—๋Ÿฌ๋Š” ๊ตฌ์ฒด์ ์œผ๋กœ๋Š” ํŒŒ์„œ ์—๋Ÿฌ๋‹ค. ๋‹ค๋ฅธ ๋ง๋กœ ํ’€์ดํ•˜๋ฉด ASI๊ฐ€ ํŒŒ์„œ๋ฅผ ๋„ˆ๊ทธ๋Ÿฝ๊ฒŒํ•˜์—ฌ ์—๋Ÿฌ๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด๋‹ค.
  • ํŒŒ์„œ ์—๋Ÿฌ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋ถ€์ •ํ™•ํ•˜๊ฒŒ/์ž˜๋ชป ์ฝ”๋”ฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋Š” ๊ฒƒ์ผ ๋ฟ, ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ๋Š” ์—†๋‹ค.
  • ๋”ฐ๋ผ์„œ ASI๊ฐ€ ๊ผผ๊ผผํžˆ ํŒŒ์„œ ์—๋Ÿฌ๋ฅผ ์ •์ •ํ–ˆ์Œ์—๋„ ๋ฐœ์ƒํ•œ ํŒŒ์„œ ์—๋Ÿฌ๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ์ž๊ฐ€ ์ •๋ง ์ž˜๋ชป ์ง  ์ฝ”๋“œ๊ฐ€ ์žˆ๋‹ค๋Š” ์ฆ๊ฑฐ๋‹ค.
  • ํ•˜์ง€๋งŒ ASI์˜ ๊ธฐ๋Šฅ์— ์˜์กดํ•˜๋Š” ๊ฒƒ์€ ๋ณธ์งˆ์ ์œผ๋กœ ์ƒˆ ์ค„์„ ์œ ํšจ ๊ณต๋ฐฑ ๋ฌธ์ž๋กœ ๋ฐ”๋ผ๋ณด๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๋Š” ์˜๊ฒฌ๋„ ์žˆ๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜๋Š” ๊ณณ์ด๋ผ๋ฉด ์–ด๋””๋“ ์ง€ ์„ธ๋ฏธ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•˜๊ณ , ASI๊ฐ€ ์–ด๋–ป๊ฒŒ๋“  ๋ญ”๊ฐ€ ํ•ด์ค„ ๊ฑฐ๋ผ๋Š” ๊ฐ€์ •์€ ์ตœ์†Œํ™”ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์ฐฝ์‹œ์ž์ธ ๋ธŒ๋ Œ๋‹จ ์•„์ดํฌ๋Š” ์ด๋ ‡๊ฒŒ ๋งํ–ˆ๋‹ค.
  • ASI๋Š” ๊ตฌ๋ฌธ ์˜ค๋ฅ˜๋ฅผ ์ •์ •ํ•˜๋Š” ํ”„๋กœ์‹œ์ €๋‹ค. ๋งŒ์•ฝ ASI๋ฅผ ๋ณดํŽธ์ ์ธ, ์œ ํšจ ๊ฐœํ–‰ ๋ฌธ์ž ๊ทœ์น™์ฏค์œผ๋กœ ์—ฌ๊ธฐ๊ณ  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค๋ฉด ๊ณค๊ฒฝ์— ์ฒ˜ํ•˜๊ฒŒ ๋  ๊ฒƒ์ด๋‹ค. ๋‚ด๊ฐ€ 1995๋…„ 5์›” ์—ดํ˜ ๊ฐ„์œผ๋กœ ๋˜๋Œ์•„๊ฐˆ ์ˆ˜๋งŒ ์žˆ๋‹ค๋ฉด ๊ฐ•๋ ฅํ•œ ์œ ํšจ ๊ฐœํ–‰ ๋ฌธ์ž๋ฅผ ๋งŒ๋“ค ๊ฒƒ์ด๋‹ค. ASI๊ฐ€ ๋งˆ์น˜ ์œ ํšจ ๊ฐœํ–‰ ๋ฌธ์ž๋ฅผ ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ฐฉ๊ฐํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ž€๋‹ค.

๐ŸŽฏ ์—๋Ÿฌโ€‹

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” ํ•˜์œ„ ์—๋Ÿฌ ํƒ€์ž…(TypeError, ReferenceError, SyntaxError ๋“ฑ)๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ผ๋ถ€ ์—๋Ÿฌ๋Š” ์ปดํŒŒ์ผ ์‹œ์ ์— ๋ฐœ์ƒํ•˜๋„๋ก ๋ฌธ๋ฒ•์ ์œผ๋กœ ์ •์˜๋„์–ด ์žˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์กฐ๊ธฐ ์—๋Ÿฌ(Early Error) ๋ถ™์žก์•„ ๋˜์ง€๊ฒŒ ๋˜์–ด ์žˆ๋Š”, ํ•œ๋ˆˆ์— ๋ด๋„ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ ์—๋Ÿฌ๋Š” ๋ฌผ๋ก ์ด๊ณ , ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์—๋Š” ๊ตฌ๋ฌธ์ƒ ์˜ค๋ฅ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒƒ๋“ค๋„ ์ •์˜๋˜์–ด ์žˆ๋‹ค.
  • ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๊ธฐ ์ „์— ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์ด๋Ÿฐ ์—๋Ÿฌ๋Š” try...catch๋กœ ์žก์„ ์ˆ˜ ์—†์œผ๋ฉฐ, ๊ทธ๋ƒฅ ํ”„๋กœ๊ทธ๋žจ ํŒŒ์‹ฑ/์ปดํŒŒ์ผ์ด ์‹คํŒจํ•œ๋‹ค.
  • ๋‹ค์Œ ์ •๊ทœ ํ‘œํ˜„์‹ ๋ฆฌํ„ฐ๋Ÿด ๋‚ด๋ถ€์˜ ๊ตฌ๋ฌธ์ด ๊ทธ๋Ÿฐ ์˜ˆ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ตฌ๋ฌธ์ƒ ์•„๋ฌด ๋ฌธ์ œ ์—†์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ์ •๊ทœ ํ‘œํ˜„์‹์€ ์กฐ๊ธฐ ์—๋Ÿฌ๋ฅผ ๋˜์ง„๋‹ค.
var a = /+foo/; // Uncaught SyntaxError: Invalid regular expression: /+foo/: Nothing to repeat
  • ํ• ๋‹น ๋Œ€์ƒ์€ ๋ฐ˜๋“œ์‹œ ์‹๋ณ„์ž์—ฌ์•ผ ํ•˜๋ฏ€๋กœ ๋‹ค์Œ ์˜ˆ์ œ์—์„œ 42๋Š” ์ž˜๋ชป๋œ ์œ„์น˜์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ณง๋ฐ”๋กœ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.
var a;
42 = a; // Uncaught SyntaxError: Invalid left-hand side in assignment

๐Ÿ“š ๋„ˆ๋ฌด ์ด๋ฅธ ๋ณ€์ˆ˜ ์‚ฌ์šฉโ€‹

  • ES6๋Š” ์ž„์‹œ ๋ฐ๋“œ ์กด(TDZ, Temporal Dead Zone)์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ๋„์ž…ํ–ˆ๋‹ค.
  • TDZ๋Š” ์•„์ง ์ดˆ๊ธฐํ™”๋ฅผ ํ•˜์ง€ ์•Š์•„ ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋“œ ์˜์—ญ์ด๋‹ค.
  • ES6 let ๋ธ”๋ก ์Šค์ฝ”ํ•‘์ด ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์ด๋‹ค.
{
a = 2; // Uncaught ReferenceError: Cannot access 'a' before initialization
let a;
}
  • let a ์„ ์–ธ์— ์˜ํ•ด ์ดˆ๊ธฐํ™”๋˜๊ธฐ ์ „ a = 2 ํ• ๋‹น๋ฌธ์ด ๋ณ€์ˆ˜ a์— ์ ‘๊ทผํ•˜๋ ค๊ณ  ํ•œ๋‹ค.
  • ํ•˜์ง€๋งŒ a๋Š” ์•„์ง TDZ ๋‚ด๋ถ€์— ์žˆ์œผ๋ฏ€๋กœ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค.
  • ์›๋ž˜ typeof ์—ฐ์‚ฐ์ž๋Š” ์„ ์–ธ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜ ์•ž์— ๋ถ™์—ฌ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€ ์•Š๋Š”๋ฐ TDZ ์ฐธ์กฐ ์‹œ์—๋Š” ์ด๋Ÿฌํ•œ ์•ˆ์ „์žฅ์น˜๊ฐ€ ์—†๋‹ค.
{
typeof a; // undefined
typeof b; // Uncaught ReferenceError: Cannot access 'b' before initialization
let b;
}

๐ŸŽฏ ํ•จ์ˆ˜ ์ธ์žโ€‹

  • TDZ ๊ด€๋ จ ์—๋Ÿฌ๋Š” ES6 ๋””ํดํŠธ ์ธ์ž ๊ฐ’์—์„œ๋„ ์ฐพ์•„๋ณผ ์ˆ˜ ์žˆ๋‹ค.
let b = 3;
function foo(a = 42, b = a + b + 5) {
// ...
}

// Uncaught SyntaxError: Identifier 'b' has already been declared
  • ๋‘ ๋ฒˆ์งธ ํ• ๋‹น๋ฌธ์—์„œ ์ขŒ๋ณ€ b๋Š” ์•„์ง TDZ์— ๋‚จ์•„ ์žˆ๋Š” b๋ฅผ ์ฐธ์กฐํ•˜๋ ค๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๋ฅผ ๋˜์ง„๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ์ด ์‹œ์ ์—์„œ ์ธ์ž a๋Š” TDZ๋ฅผ ๋ฐŸ๊ณ  ๊ฐ„ ์ดํ›„์—ฌ์„œ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค.
  • ES6 ๋””ํดํŠธ ์ธ์ž ๊ฐ’์€ ํ•จ์ˆ˜์— ์ธ์ž๋ฅผ ๋„˜๊ธฐ๊ธฐ ์•Š๊ฑฐ๋‚˜ undefined๋ฅผ ์ „๋‹ฌํ–ˆ์„ ๋•Œ ์ ์šฉ๋œ๋‹ค.
function foo(a = 42, b = a + 1) {
console.log(a, b);
}

foo(); // 42 43
foo(undefined); // 42 43
foo(5); // 5 6
foo(void 0, 7); // 42 7
foo(null); // null 1
  • ES6 ๋””ํดํŠธ ์ธ์ž ์ž…์žฅ์—์„œ ๋ณด๋ฉด ์ธ์ž ๊ฐ’์ด ์—†๊ฑฐ๋‚˜ undefined ๊ฐ“์„ ๋ฐ›๊ฑฐ๋‚˜ ๊ทธ๊ฒŒ ๊ทธ๊ฑฐ์ง€๋งŒ ์ฐจ์ด์ ์„ ์—ฟ๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.
function foo(a = 42, b = a + 1) {
console.log(
arguments.length, a, b,
arguments[0], arguments[1],
);
}

foo(); // 0 42 43 undefined undefined
foo(10); // 1 10 11 10 undefined
foo(10, undefined); // 2 10 11 10 undefined
foo(10, null); // 2 10 null 10 null
  • undefined ์ธ์ž๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ๋„˜๊ธฐ๋ฉด arguments ๋ฐฐ์—ด์—๋„ ๊ฐ’์ด undefined์ธ ์›์†Œ๊ฐ€ ์ถ”๊ฐ€๋˜๋Š”๋ฐ, ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•˜๋Š” ๋””ํดํŠธ ์ธ์ž ๊ฐ’๊ณผ ๋‹ค๋ฅด๋‹ค.
  • ์ด๋Ÿฐ ํ˜„์ƒ์ด ES5์—์„œ๋„ ๋˜‘๊ฐ™์€ ๋ถˆ์ผ์น˜๋Š” ๊ต๋ฌ˜ํ•˜๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.
function foo(a) {
a = 42;
console.log(arguments[0]);
}

foo(2); // 42
foo(); // undefined
  • ์ธ์ž๋ฅผ ๋„˜๊ธฐ๋ฉด arguments์˜ ์Šฌ๋กฏ๊ณผ ์ด๋‚˜๊ฐ€ ์—ฐ๊ฒฐ๋˜๋ฉด์„œ ํ•ญ์ƒ ๊ฐ™์€ ๊ฐ’์ด ํ• ๋‹น๋˜์ง€๋งŒ ์ธ์ž ์—†์ด ํ˜ธ์ถœํ•˜๋ฉด ์ „ํ˜€ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋‹ค.
  • ๋”์šฑ์ด ์—„๊ฒฉ ๋ชจ๋“œ์—์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด๋„ ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๋Š”๋‹ค.
function foo(a) {
"use strict";
a = 42;
console.log(arguments[0]);
}

foo(2); // 2
foo(); // undefined

๐ŸŽฏ try...finallyโ€‹

  • finally ์ ˆ์˜ ์ฝ”๋“œ๋Š” ๋ฐ˜๋“œ์‹œ ์‹คํ–‰๋””๊ณ  ๋‹ค๋ฅธ ์ฝ”๋“œ๋กœ ๋„˜์–ด๊ฐ€๊ธฐ ์ „์— try ์ดํ›„๋ถ€ํ„ฐ ํ•ญ์ƒ ์‹คํ–‰๋œ๋‹ค.
  • ์–ด๋–ค ์˜๋ฏธ์—์„œ finally ์ ˆ์€ ๋‹ค๋ฅธ ๋ธ”๋ก ์ฝ”๋“œ์— ์ƒ๊ด€์—†์ด ํ•„ํžˆ ์‹คํ–‰๋˜์–ด์•ผ ํ•  ์ฝœ๋ฐฑ ํ•จ์ˆ˜์™€ ๊ฐ™๋‹ค๊ณ  ๋ด์•ผ ๋งž๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ ๋งŒ์•ฝ try ์ ˆ์— return๋ฌธ์ด ์žˆ์œผ๋ฉด?
function foo() {
try {
return 42;
}
finally {
console.log('hello');
}
console.log('์‹คํ–‰๋  ๋ฆฌ ์—†์ง€.');
}

console.log(foo());
// hello
// 42
  • return 42์—์„œ foo() ํ•จ์ˆ˜์˜ ์™„๋ฃŒ ๊ฐ’์€ 42๋กœ ์„ธํŒ…๋˜๊ณ , try ์ ˆ์˜ ์‹คํ–‰์ด ์ข…๋ฃŒ๋˜๋ฉด์„œ ๊ณง ๋ฐ”๋กœ finally ์ ˆ๋กœ ๋„˜์–ด๊ฐ„๋‹ค.
  • ๊ทธ ํ›„ foo() ํ•จ์ˆ˜ ์ „์ฒด์˜ ์‹คํ–‰์ด ๋๋‚˜๊ณ  ์™„๋ฃŒ ๊ฐ’์€ ํ˜ธ์ถœ๋ถ€ console.log()๋ฌธ์— ๋ฐ˜ํ™˜๋œ๋‹ค.
  • try์•ˆ์— throw๊ฐ€ ์žˆ์–ด๋„ ๋น„์Šทํ•˜๋‹ค.
function foo() {
try {
throw 42;
}
finally {
console.log('hello');
}
console.log('์‹คํ–‰๋  ๋ฆฌ ์—†์ง€.');
}

console.log(foo());
// hello
// Uncaught 42
  • ๋งŒ์•ฝ finally ์ ˆ์—์„œ ์˜ˆ์™ธ๊ฐ€ ๋˜์ ธ์ง€๋ฉด, ์ด์ „์˜ ์‹คํ–‰ ๊ฒฐ๊ณผ๋Š” ๋ชจ๋‘ ๋ฌด์‹œํ•œ๋‹ค. ์ฆ‰, ์ด์ „์— try ๋ธ”๋ก์—์„œ ์ƒ์„ฑํ•œ ์™„๋ฃŒ ๊ฐ’์ด ์žˆ์–ด๋„ ์™„์ „ํžˆ ์‚ฌ๋ผ์ง„๋‹ค.
function foo() {
try {
return 42;
}
finally {
throw 'hello';
}
console.log('์‹คํ–‰๋  ๋ฆฌ ์—†์ง€.');
}

console.log(foo());
// Uncaught hello
  • continue๋‚˜ break ๊ฐ™์€ ๋น„์„ ํ˜• ์ œ์–ด๋ฌธ ์—ญ์‹œ return๊ณผ throw์™€ ๋น„์Šทํ•˜๊ฒŒ ์ž‘๋™ํ•œ๋‹ค.
for(var i = 0; i < 10; i++) {
try {
continue;
}
finally {
console.log(i);
}
}

// 0 1 2 3 4 5 6 7 8 9
  • finally ์ ˆ์˜ return์€ ๊ทธ ์ด์ „์— ์‹คํ–‰๋œ try๋‚˜ catch ์ ˆ์˜ return์„ ๋ฎ์–ด์“ฐ๋Š”๋ฐ ๋ฐ˜๋“œ์‹œ ๋ช…์‹œ์ ์œผ๋กœ return ๋ฌธ์„ ์จ์•ผ ํ•œ๋‹ค.
function bar() {
try {
return 42;
}
finally {
// return 42๋ฅผ ๋ฌด์‹œํ•œ๋‹ค.
return;
}
}

function foo() {
try {
return 42;
}
finally {
// return 42๋ฅผ ๋ฌด์‹œํ•œ๋‹ค.
return 'hello';
}
}

function baz() {
try {
return 42;
}
finally {
// return์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ด์ „ return์„ ์กด์ค‘ํ•œ๋‹ค.
}
}
  • ๋ณดํ†ต ํ•จ์ˆ˜์—์„œ๋Š” return์„ ์ƒ๋žตํ•ด๋„ return; ๋˜๋Š” return undefined; ํ•œ ๊ฒƒ์œผ๋กœ ์น˜์ง€๋งŒ, finally ์•ˆ์—์„œ return์„ ๋นผ๋ฉด ์ด์ „์˜ return์„ ๋ฌด์‹œํ•˜์ง€ ์•Š๊ณ  ์กด์ค‘ํ•œ๋‹ค.
function foo() {
bar: {
try {
return 42;
}
finally {
// bar ๋ ˆ์ด๋ธ” ๋ธ”๋ก์œผ๋กœ ๋‚˜๊ฐ„๋‹ค.
break bar;
}
}
console.log('์ด๊ฒŒ ๋ญ์•ผ!');

return 'hello';
}

console.log(foo());
// ์ด๊ฒŒ ๋ญ์•ผ!
// hello
  • ์ด๋Ÿฐ ์ฝ”๋”ฉ์€ ํ”ผํ•˜์ž.
  • ์‚ฌ์‹ค์ƒ return์„ ์ทจ์†Œํ•ด๋ฒ„๋ฆฌ๋Š” finally + ๋ ˆ์ด๋ธ” break ์ฝ”๋“œ๋Š” ๊ทธ๋ƒฅ ๊ณจ์น˜ ์•„ํ”ˆ ์ฝ”๋“œ๋ฅผ ์–‘์‚ฐํ•  ๋ฟ์ด๋‹ค.

๐ŸŽฏ switchโ€‹

switch(a) {
case 2:
// ๋ญ”๊ฐ€ ํ• ํ…Œ๊ณ 
break;
case 42:
// ๋‹ค๋ฅธ ์ผ์„ ํ• ํ…Œ๊ณ 
break;
default:
// ์ด๋ฌด๊ฒƒ๋„ ์•ˆ ๊ฑธ๋ฆฌ๋ฉด ์—ฌ๊ธฐ
}
  • switch ํ‘œํ˜„์‹๊ณผ case ํ‘œํ˜„์‹ ๊ฐ„์˜ ๋งค์น˜ ๊ณผ์ •์€ === ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋˜‘๊ฐ™๋‹ค.
  • case ๋ฌธ์— ํ™•์‹คํ•œ ๊ฐ’์ด ๋ช…์‹œ๋œ ๊ฒฝ์šฐ๋ผ๋ฉด ์—„๊ฒฉํ•œ ๋งค์น˜๊ฐ€ ์ ์ ˆํ•˜๋‹ค.
  • ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ•์ œ๋ณ€ํ™˜์ด ์ผ์–ด๋‚˜๋Š” ๋™๋“ฑ๋น„๊ต๋ฅผ ์ด์šฉํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด switch ๋ฌธ์— ๊ผผ์ˆ˜?๋ฅผ ๋ถ€๋ ค์•ผ ํ•œ๋‹ค.
var a = '42';
switch (true) {
case a == 10:
console.log('10 ๋˜๋Š” "10"');
break;
case a == 42:
console.log('42 ๋˜๋Š” "42"');
break;
default:
// ์—ฌ๊ธฐ๋Š” ์˜ฌ๋ฆฌ๊ฐ€ ์—†์–ด์šฉ
}

// '42 ๋˜๋Š” "42"'
  • ==๋ฅผ ์จ๋„ switch ๋ฌธ์€ ์—„๊ฒฉํ•˜๊ฒŒ ๋งค์น˜ํ•œ๋‹ค. ๊ทธ๋ž˜์„œ case ํ‘œํ˜„์‹ ํ‰๊ฐ€ ๊ฒฐ๊ณผ๊ฐ€ truthy์ด์ง€๋งŒ ์—„๊ฒฉํžˆ true๋Š” ์•„๋‹ ๊ฒฝ์šฐ ๋งค์น˜๋Š” ์‹คํŒจํ•œ๋‹ค.
  • ์ด๋ฅผํ…Œ๋ฉด ํ‘œํ˜„์‹์— &&๋‚˜ ||๊ฐ™์€ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋œ๋‹ค.
var a = 'Hello World';
var b = 10;

switch (true) {
case (a || b == 10):
// ์—ฌ๊ธฐ๋กœ ์•ˆ์˜ค๋Š”๋ฐ..
break;
default:
console.log('์˜ค์ž‰');
}

// ์˜ค์ž‰
  • (a || b == 10)์˜ ํ‰๊ฐ€ ๊ฒฐ๊ณผ๋Š” true๊ฐ€ ์•„๋‹Œ Hello World์ด๋ฏ€๋กœ ๋งค์น˜๊ฐ€ ๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ์ด ๋•Œ๋Š” ๋ถ„๋ช…ํžˆ ํ‘œํ˜„์‹์˜ ๊ฒฐ๊ณผ๊ฐ€ true/false๋กœ ๋–จ์–ด์ง€๊ฒŒ case !!(a || b == 10) :๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
  • default ์ ˆ์€ ์„ ํƒ ์‚ฌํ•ญ์ด๋ฉฐ ๊ผญ ๋ ๋ถ€๋ถ„์— ์“ธ ํ•„์š”๋Š” ์—†๋‹ค.
  • ๊ทธ๋Ÿฐ๋ฐ default์—์„œ๋„ break๋ฅผ ์•ˆ ์จ์ฃผ๋ฉด ์ฝ”๋“œ๊ฐ€ ๊ณ„์† ์‹คํ–‰๋œ๋‹ค.

๐ŸŽฏ ์ •๋ฆฌํ•˜๊ธฐโ€‹

  • ๋ฌธ๊ณผ ํ‘œํ˜„์‹์€ ์˜์–ด ์–ธ์–ด์˜ ๋ฌธ์žฅ, ์–ด๊ตฌ์™€ ๊ฐ๊ฐ ์œ ์‚ฌํ•˜๋‹ค. ํฌํ˜„์‹์€ ์ˆœ์ˆ˜ํ•˜๊ณ  ๋…๋ฆฝ์ ์ด์ง€๋งŒ ๋ถ€์ˆ˜ ํšจ๊ณผ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์—๋Š” ์ˆœ์ˆ˜ ๊ตฌ๋ฌธ ์™ธ์— ์˜๋ฏธ๋ก ์ ์ธ ์‚ฌ์šฉ ๊ทœ์น™(์ฝ”ํ…์ŠคํŠธ)๊ฐ€ ๋‚ด์žฌ๋˜์–ด ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” {} ์Œ์€ ๋ฌธ ๋ธ”๋ก, ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์ด ๋  ์ˆ˜ ์žˆ๊ณ , ํ•ด์ฒด ํ• ๋‹น์ด๋‚˜ ๋ช…๋ช…๋œ ํ•จ์ˆ˜ ์ธ์ž๋กœ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—ฐ์‚ฐ์ž๋Š” ๊ทธ ์šฐ์„ ์ˆœ์œ„์™€ ๊ฒฐํ•ฉ์„ฑ์ด ๋ถ„๋ช…ํžˆ ์ •ํ•ด์ ธ ์žˆ๋‹ค.
  • ASI(์ž๋™ ์„ธ๋ฏธ์ฝœ๋ก  ์‚ฝ์ž…)๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์— ๋‚ด์žฅ๋œ ํŒŒ์„œ ์—๋Ÿฌ ๊ฐ์ง€ ์‹œ์Šคํ…œ์œผ๋กœ ํ•„์š”ํ•œ ;์ด ์ฝ”๋“œ์—์„œ ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ ํŒŒ์„œ ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์‚ฝ์ž…ํ•ด๋ณด๊ณ  ์ฝ”๋“œ ์‹คํ–‰์— ๋ฌธ์ œ๊ฐ€ ์—†๋„๋ก ๋„์™€์ค€๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—๋Ÿฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ์œ ํ˜•์ด ์žˆ์ง€๋งŒ ํฌ๊ฒŒ ์กฐ๊ธฐ ์—๋Ÿฌ(์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋˜์ง„ ์žก์„ ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ) ์™€ ๋Ÿฐํƒ€์ž„ ์—๋Ÿฌ(try..catch๋กœ ์žก์„ ์ˆ˜ ์žˆ๋Š” ์—๋Ÿฌ) ๋กœ ๋ถ„๋ฅ˜ ๋œ๋‹ค.
  • ํ•จ์ˆ˜ arguments์™€ ๋ช…๋ช…๋œ ์ธ์ž์˜ ๊ด€๊ณ„๋Š” ํฅ๋ฏธ๋กœ์šด๋ฐ arguments ๋ฐฐ์—ด์„ ์กฐ์‹ฌํ•˜์ง€ ์•Ÿ์œผ๋ฉด ๊ตฌ๋ฉ ๋‚œ ์ถ”์ƒํ™”์—์„œ ๋น„๋กฏ๋œ ๊ฐ–๊ฐ€์ง€ ํ•จ์ •์— ๋น ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€๊ธ‰์  arguments ์‚ฌ์šฉ์„ ์ž์ œํ•˜๋˜ ๊ผญ ์‚ฌ์šฉํ•ด์•ผ ํ•  ๊ฒฝ์šฐ arguments์˜ ์›์†Œ์™€ ์ด์— ๋Œ€์‘ํ•˜๋Š” ๋ช…๋ช…๋œ ์ธ์ž๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•˜์ง€ ๋ง์ž.
  • try์— ๋ถ™์€ finally ์ ˆ์—๋Š” ์‹คํ–‰ ์ฒ˜๋ฆฌ ์ˆœ์„œ ๋ฉด์—์„œ ๋ณ„๋‚œ ์ ์ด ์žˆ๋Š”๋ฐ ๋–„๋กœ๋Š” ์ด๋Ÿฐ ๊ธฐ๋ฒฝ์ด ๋„์›€์ด ๋˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ๋ ˆ์ด๋ธ” ๋ธ”๋ก๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ๋งŽ์€ ํ˜ผ๋ž€์„ ๊ฐ€์ค‘์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.
  • switch๋Š” ์žฅํ™ฉํ•œ if..else if... ๋ฌธ์„ ๋Œ€์ฒดํ•˜๋Š” ํ›Œ๋ฅญํ•œ ์ˆ˜๋‹จ์•„์ง€๋งŒ, ๋‹จ์ˆœํ•˜๊ฒŒ๋งŒ ์ƒ๊ฐํ–ˆ๋‹ค๊ฐ„ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ๊ฒฐ๊ณผ์— ๋‹นํ™ฉํ•  ์ˆ˜ ์žˆ๋‹ค.