๐Ÿ’ช JavaScript w/ ์ฝ”๋”ฉ์•™๋งˆ (์ดˆ๊ธ‰)

[meษช]ยท2021๋…„ 8์›” 11์ผ
1

1-2. Today I Learned. JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
2/8

Preface

๐Ÿ“Œ ๊ฐœ๋ฐœ ๊ณต๋ถ€ 1๊ฐœ์›” ์ฐจ์ธ to-be ๊ฐœ๋ฐœ์ž์˜ ์ž์Šต ๋ธ”๋กœ๊ทธ๐Ÿ™‚๏พ Aug 9 ~ 13, 2021

ํ˜„์žฌ ์ƒํƒœ
์•„๋‹ˆ์•ผ... ๋‚œ ์ดˆ๊ธ‰ ๊ฐœ๋…์„ ๋” ์ตํ˜€์•ผ ํ•ด


โž• afterthought

์ƒํ™œ์ฝ”๋”ฉ ์„ ์ƒ๋‹˜ ๊ฐ•์˜๋งŒํผ ์‰ฝ๋‹ค.
๊ฐ•์˜๋ฅผ ์ดˆ๊ธ‰์ด๋ž‘ ์ค‘๊ธ‰์œผ๋กœ ๋‚˜๋‰˜์–ด ์žˆ๋Š” ๊ฒŒ ์ฐธ ์ข‹์•˜๋‹ค.
์ค‘๊ธ‰ ๊ฐ•์˜ ๋ณด๊ณ  ๋‚˜์„œ ๋“œ๋ฆผ์ฝ”๋”ฉ ๊ฐ•์˜๋„ ๋‹ค์‹œ ๋„์ „ํ•ด ๋ด์•ผ์ง€...





JavaScript

1. variable

์ •์˜

์–ด๋–ค ์ •๋ณด์— ์ด๋ฆ„์„ ๋ถ™์—ฌ์„œ ์ €์žฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋ณ€์ˆ˜๋ช…

ย ย ย ย 1) ๋ณ€์ˆ˜๋Š” ๋ฌธ์ž, ์ˆซ์ž, $, _๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
ย ย ย ย 2) ์ฒซ ๊ธ€์ž๋Š” ์ˆซ์ž๊ฐ€ ๋  ์ˆ˜ ์—†๋‹ค.
ย ย ย ย 3) ์˜ˆ์•ฝ์–ด (reserved words)๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
ย ย ย ย ย ย ย ย ย ex. class, if ๋“ฑ
ย ย ย ย 4) ๊ฐ€๊ธ‰์ ์ด๋ฉด ์ƒ์ˆ˜๋Š” ๋Œ€๋ฌธ์ž๋กœ ์ ๋Š” ๊ฒŒ ์ข‹๋‹ค.
ย ย ย ย 5) ๋ณ€์ˆ˜๋ช…์€ ์ฝ๊ธฐ ์‰ฝ๊ณ  ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ์„ ์–ธํ•ด์•ผ ํ•œ๋‹ค.

๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•

alert(), console.log()

let, const

'name'์ด๋‚˜ 'age'๊ฐ™์€ ๋ณ€์ˆ˜๋ช…์€ ์œ ์ผํ•˜๋‹ค๋Š” ๋ณด์žฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
์ด๋•Œ let์ด๋‚˜ const๋กœ ๋ณ€์ˆ˜๋ช…์„ ์ง€์ •ํ•˜๋ฉด ๋‹ค์Œ์˜ error ๋ฌธ๊ตฌ๋ฅผ ํ†ตํ•ด ๋ณ€์ˆ˜๋ช…์ด ์ค‘๋ณต๋˜๋Š” ๊ฑธ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.
Uncaught SyntaxError: Identifier 'name' has already been declared at ~

let์€ ํ•œ ๋ฒˆ ์„ ์–ธํ•œ ํ›„์—๋„ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Ÿด ๋• ์˜๋„์ ์œผ๋กœ let์„ ์ƒ๋žตํ•˜๊ณ  ์ ์œผ๋ฉด ๋œ๋‹ค.

const ํ•œ ๋ฒˆ ์„ ์–ธํ•œ ํ›„์— ์ ˆ๋Œ€ ๋ฐ”๊พธ์ง€ ์•Š์„ ์ƒ์ˆ˜๋ฅผ ์ž…๋ ฅํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋Œ€๋ฌธ์ž๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค.
ex. ฯ€, ์ตœ๋Œ€๊ฐ’, ์ƒ์ผ ๋“ฑ

const SPEED_LIMIT = 100;

๋ชจ๋“  ๋ณ€์ˆ˜๋ฅผ const๋กœ ๋จผ์ € ์„ ์–ธํ•˜๊ณ  ๋‚˜์ค‘์— ๋ดค์„ ๋•Œ ๋ณ€๊ฒฝ๋  ์—ฌ์ง€๊ฐ€ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ let์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.


2. data types

ย ย ย ย ย 1) ๋ฌธ์žํ˜•
ย ย ย ย ย ย ย ย ย (1) '', "", backtick(``)
ย ย ย ย ย ย ย ย ย (2) ๋ฌธ์ž ์•ˆ์— ์ž‘์€ ๋”ฐ์˜ดํ‘œ๊ฐ€ ์žˆ์œผ๋ฉด ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๋Š” ๊ฒŒ ์ข‹๋‹ค. or ๊ทธ๋Œ€๋กœ ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๋˜ ๋‚ด๋ถ€์— ์žˆ๋Š” ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋Š” ์•ž์— back slash๋ฅผ ๋ถ™์ด๋ฉด ๋œ๋‹ค.
ย ย ย ย ย ย ย ย ย 3) backtick์€ ๋ฌธ์ž์—ด ๋‚ด๋ถ€์— ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ํ‘œ์‹œํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹๋‹ค.
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ex.

My name is ${name};

ย ย ย ย ย 2) ์ˆซ์žํ˜•
ย ย ย ย ย ย ย ย ย (1) ์‚ฌ์น™์—ฐ์‚ฐ ๊ฐ€๋Šฅ
ย ย ย ย ย ย ย ย ย ย ย ย ย ย โ‘  ์ˆซ์ž๋ฅผ 0์œผ๋กœ ๋‚˜๋ˆ„๋ฉด ๊ฒฐ๊ณผ ๊ฐ’์ด infinity
ย ย ย ย ย ย ย ย ย ย ย ย ย ย โ‘ก ๋ฌธ์ž์™€ ์ˆซ์ž๋ฅผ ์—ฐ์‚ฐํ•˜๋ฉด ๋”ํ•˜๊ธฐ์™€ ๋‚˜๋ˆ„๊ธฐ ๋นผ๊ณ ๋Š” ๋ชจ๋‘ NaN (Not a Number) ๊ฐ’์ด๋ฉฐ, ๋”ํ•˜๊ธฐ๋ฅผ ํ•˜๋ฉด ๊ฐ’์ด ๋ฌธ์žํ˜•์œผ๋กœ ๋ฐ”๋€Œ๊ณ , ๋‚˜๋ˆ„๊ธฐ๋ฅผ ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ž๋ฃŒํ˜•์ด ์ˆซ์ž๋กœ ๋ณ€ํ™˜๋จ
ย ย ย ย ย ย ย ย ย (2) ์†Œ์ˆ˜์  ๊ฐ€๋Šฅ

ย ย ย ย ย 3) boolean
ย ย ย ย ย ย ย ย ย 1) ์ฐธ
ย ย ย ย ย ย ย ย ย 2) ๊ฑฐ์ง“

ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ex.

const name = "Mai";
const age = 30;

console.log(name == "May") // false
console.log(age > 40) // false

ย ย ย ย ย 4) null, undefined
ย ย ย ย ย ย ย ย ย (1) null : ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ์„ ์˜๋ฏธํ•˜๋‚˜ null๋„ ํ•˜๋‚˜์˜ ๊ฐ’์ž„
ย ย ย ย ย ย ย ย ย (2) undefined : ์•„์ง ๊ฐ’์ด ํ• ๋‹น๋˜์ง€ ์•Š์Œ์„ ์˜๋ฏธ
ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ย ex.

let rate;
console.log(rate); // undefined โˆต ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ  ์•„๋ฌด๊ฒƒ๋„ ํ• ๋‹นํ•˜์ง€ ์•Š์•„์„œ

ย ย ย ย 5) ๊ฐ์ฒดํ˜•
ย ย ย ย ย ย ย ย ย ์ถ”ํ›„ ๋‹ค๋ฃฐ ์˜ˆ์ •
ย ย ย ย 6) symbolํ˜•
ย ย ย ย ย ย ย ย ย ์ถ”ํ›„ ๋‹ค๋ฃฐ ์˜ˆ์ •

โœ”๏ธ typeof ์—ฐ์‚ฐ์ž
์ž๋ฃŒํ˜•์„ ์•Œ๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
null์€ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ object๋กœ ๋‚˜์˜ด ์ฃผ์˜ (์ดˆ๊ธฐ version์˜ ์˜ค๋ฅ˜์ด๋‚˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ๊ณ„์† object๋กœ ์ทจ๊ธ‰ํ•œ๋‹ค.)


3. dialogue boxes

์ข…๋ฅ˜

ย ย ย ย 1) alert() : 'ํ™•์ธ' button๋งŒ ์žˆ์Œ
ย ย ย ย 2) prompt() : ์ž…๋ ฅ์ฐฝ ์žˆ์Œ
ย ย ย ย 3) confirm() : '์ทจ์†Œ'์™€ 'ํ™•์ธ' button์ด ์žˆ์Œ
ย ย ย ย ย ย ย ย ย ex.

const name = prompt("์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”.");
alert(`์•ˆ๋…•ํ•˜์„ธ์š”, ${name}๋‹˜. ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.`);

const date = prompt("์˜ˆ์•ฝ์ผ์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”.", "2021-08-");

const isAdult = confirm("๋‹น์‹ ์€ ์„ฑ์ธ์ž…๋‹ˆ๊นŒ?");
// ํ™•์ธ button โ†’ true
// ์ทจ์†Œ button โ†’ false

๋‹จ์ 

์ด๋ ‡๊ฒŒ browser๊ฐ€ ์ œ๊ณตํ•ด ์ฃผ๋Š” ๋Œ€ํ™”์ƒ์ž๋Š” ํŽธํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ ๋‹จ์ ๋„ ์žˆ๋‹ค.
ย ย ย 1) script๊ฐ€ ์ผ์‹œ ์ •์ง€๋จ
ย ย ย 2) styling ํ•  ์ˆ˜ ์—†๊ณ  browser๋งˆ๋‹ค design์ด ๋‹ค๋ฆ„


4. type conversion

์ •์˜

์—ฐ์‚ฐ์— ๋”ฐ๋ผ ์ž๋ฃŒํ˜•์ด ๋ณ€๊ฒฝ๋˜๊ณ , ์ด์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฃผ์˜ํ•œ๋‹ค.
์ž๋™ ํ˜• ๋ณ€ํ™˜์œผ๋กœ ์ธํ•ด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ช…์‹œ์  ํ˜• ๋ณ€ํ™˜์„ ํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค.

์ข…๋ฅ˜

ย ย ย ย 1) String() : ๊ด„ํ˜ธ ์•ˆ์˜ ์ž๋ฃŒํ˜•์„ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜
ย ย ย ย 2) Number() : ๊ด„ํ˜ธ ์•ˆ์˜ ์ž๋ฃŒํ˜•์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜
ย ย ย ย ย ย ย ย ย ex.

console.log(
  Number(true), // 1
  Number(false) // 0
  Number(null) // 0
  Number(undefined) // NaN
)

ย ย ย ย ย 3) Boolean() : true ํ˜น์€ false ๊ฐ’์„ ๋ฐ˜ํ™˜
ย ย ย ย ย ย ย ย ย ex.

console.log(
  Boolean(0), // false
  Boolean('0'), // true
  Boolean(""), // false
  Boolean(" "), // true
  Boolean(null), // false
  Boolean(undefined), // false
  Boolean(NaN), // false
)

5. operators

์‚ฌ์น™์—ฐ์‚ฐ +, -, *, % (๋‚˜๋จธ์ง€)

num = num + 5; = num += 5;

์ฆ๊ฐ€ ์—ฐ์‚ฐ์ž, ๊ฐ์†Œ ์—ฐ์‚ฐ์ž

let num = 10;
num -= 5;
console.log(num); // 5

let num = 10;
let result = num++
console.log(result); // 10

let num = 10;
let result = ++num
console.log(result); // 11

6. ๋น„๊ต ์—ฐ์‚ฐ์ž, ์กฐ๊ฑด๋ฌธ

๋น„๊ต ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด boolean ๊ฐ’์„ ์–ป์–ด์„œ ์กฐ๊ฑด๋ฌธ์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

if

ex.

if(age > 18) {
  console.log("ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.");
}

if(age <= 18) {
  console.log("์•ˆ๋…•ํžˆ ๊ฐ€์„ธ์š”.");
}

else

if๋ฌธ์ด false์ผ ๋•Œ ์‹คํ–‰๋œ๋‹ค.
ex.

const age = 10;

if(age > 18) {
  console.log("ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.");
} else if(age === 18) {
  cnosole.log("์ˆ˜๋Šฅ ์ž˜ ์น˜์„ธ์š”.");
} else {
  console.log("์•ˆ๋…•ํžˆ ๊ฐ€์„ธ์š”.");
}

// โฌ‡๏ธ Output
// "์•ˆ๋…•ํžˆ ๊ฐ€์„ธ์š”."

7. ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž

์ข…๋ฅ˜

ย ย ย ย 1) or (||) : ํ•˜๋‚˜๋งŒ ture์—ฌ๋„ true ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์—ฐ์‚ฐ์—์„œ true๋ฅผ ๋ฐœ๊ฒฌํ•˜๋Š” ์ฆ‰์‹œ ์—ฐ์‚ฐ์„ ๋ฉˆ์ถค
ย ย ย ย 2) and (&&) : ํ•˜๋‚˜๋งŒ false์—ฌ๋„ false ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์—ฐ์‚ฐ์—์„œ flase๋ฅผ ๋ฐœ๊ฒฌํ•˜๋Š” ์ฆ‰์‹œ ์—ฐ์‚ฐ์„ ๋ฉˆ์ถค
ย ย ย ย ย ย ย ย ย ex.

const name = "Mai";
const age = 31;
if(name === "Ian" || age > 19) {
  console.log("ํ†ต๊ณผ"); // ํ†ต๊ณผ
}
const name = "Mai";
const age = 31;
if(name === "May" && age > 19) {
  console.log("ํ†ต๊ณผ");
} else {
  console.log("์‘ ๋„ˆ ๋ง๊ตฌ")
}

// โฌ‡๏ธ Output
// "์‘ ๋„ˆ ๋ง๊ตฌ"

ย ย ย ย ย 3) not (!)
ย ย ย ย ย ย ย ย ย ex.

const age = prompt("๋‚˜์ด๊ฐ€...?");
const isAdult = age > 18;
if(!isAdult) {
  console.log("Go back")
}

// โฌ‡๏ธ Output
// 18 ์ดํ•˜๋ฅผ ์ž…๋ ฅํ–ˆ์„ ๋•Œ๋งŒ
// "Go back"
// ์ถœ๋ ฅ

์šฐ์„ ์ˆœ์œ„

&&๊ฐ€ ||์— ์šฐ์„ ํ•œ๋‹ค.

// ๋‚จ์ž์ด๊ณ , ์ด๋ฆ„์ด Sherlock์ด๊ฑฐ๋‚˜ ์„ฑ์ธ์ด๋ฉด ํ†ต๊ณผ

const gender = "F";
// โฌ‡๏ธ Output
// "F"์ด๋ฉด "Go back", "M"์ด๋ฉด "ํ†ต๊ณผ"
const name = "Mai";
const isAdult = true;

// ์ด๋ ‡๊ฒŒ ์ ์œผ๋ฉด ์•ˆ ๋จ
if(gender === "M" && name === "Sherlock" || isAdult) {
// ์™œ๋ƒํ•˜๋ฉด ์ด๊ฑด ์•„๋ž˜์™€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ : "Sherlock์ด๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋‚จ์ž์ด๊ฑฐ๋‚˜ ์–ด๋ฅธ์ด๋ฉด ํ†ต๊ณผ"
if((gender === "M" && name === "Sherlock") || isAdult) {
// ๐Ÿ‘‡ ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ์ ์–ด์•ผ ํ•จ
if(gender === "M" && (name === "Sherlock" || isAdult) {
   console.log("ํ†ต๊ณผ")
} else {
  console.log("Go back")
}

8. loop

์ •์˜

๋™์ผํ•œ ์ž‘์—…์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐ˜๋ณตํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
๋ช…ํ™•ํ•œ ํšŸ์ˆ˜๊ฐ€ ์ •ํ•ด์ ธ ์žˆ์œผ๋ฉด for๋ฌธ์„, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด while๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ํŽธ์ด๋ฉฐ, do while์€ ์‚ฌ์šฉ ๋นˆ๋„๊ฐ€ ๋‚ฎ๋‹ค.

์ข…๋ฅ˜

ย ย ย ย 1) for : for (์ดˆ๊ธฐ๊ฐ’ ; ์กฐ๊ฑด (false ๋˜๋ฉด ๋ฉˆ์ถ”๊ณ  ๋ฐ˜๋ณต๋ฌธ์„ ๋น ์ ธ๋‚˜์˜ด) ; code ์‹คํ–‰ ํ›„ ์ž‘์—…)
ย ย ย ย ย ย ย ย ย ex.

// 1 ~ 10 log
for(let i = 0 ; i < 10 ; i++) {
  console.log(i+1)
}
// ํ˜น์€
for(let i = 1 ; 1 < 11 ; 1++) {
  console.log(i)
}
// ํ˜น์€
for(let i = 1 ; 1 <= 10 ; 1++) {
  console.log(i)
}

ย ย ย ย ย 2) while

// 0 ~ 9 log
let i = 0;
while(i < 10) {
  console.log(i);
  i++;
}

ย ย ย ย ย 3) do while : while์ฒ˜๋Ÿผ ์กฐ๊ฑด ๋จผ์ € ํ™•์ธํ•˜๋Š” ๊ฒŒ ์•„๋‹Œ, ์ ์–ด๋„ ํ•œ ๋ฒˆ์€ ์‹คํ–‰ํ•˜๊ณ  ์กฐ๊ฑด์„ ํ™•์ธํ•˜๋Š” ๊ฒŒ while๊ณผ์˜ ์ฐจ์ด์ 

โœ”๏ธ break
๋ฉˆ์ถ”๊ณ  ๋ฐ”๋กœ ๋น ์ ธ๋‚˜์˜จ๋‹ค.

while(true) {
  let answer = confirm("๊ณ„์† ํ• ๊นŒ์š”?");
  if(!answer) {
    break;
  }
}

โœ”๏ธ continue
break์ฒ˜๋Ÿผ ๋ฉˆ์ถ”์ง€๋งŒ ๋น ์ ธ๋‚˜์˜ค์ง€ ์•Š๊ณ  ๋‹ค์Œ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค.

// ์ง์ˆ˜๋งŒ log
// ์•„๋ž˜์™€ ๊ฐ™์ด ํ•˜๋ฉด 0, 2, 4, 6, 8 log
for(let i = 0 ; i < 10 ; i++) {
  if(i%2) {
    continue;
  }
  console.log(i)
}

// ์•„๋ž˜์™€ ๊ฐ™์ด ํ•˜๋ฉด 1, 3, 5, 7, 9 log (continue ์“ฐ๊ณ  ์•ˆ ์“ฐ๊ณ  ์ฐจ์ด)
for (let i = 0 ; i < 10 ; i++) {
  if(i%2)
    concole.log(i)
}

9. switch

switch๋Š” if-else๋ฌธ์œผ๋กœ ๋ฐ”๊พธ์–ด์„œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ฐ˜๋Œ€๋กœ๋„ ๋งˆ์ฐฌ๊ฐ€์ง€)
๊ทธ๋Ÿผ์—๋„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” case๊ฐ€ ๋‹ค์–‘ํ•  ๋•Œ ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

// switch๋กœ ์ž‘์„ฑ
switch(ํ‰๊ฐ€) {
  case A :
    // A์ผ ๋•Œ code
  case B :
    // B์ผ ๋•Œ code
    ...
}
// if๋กœ ์ž‘์„ฑ
if(ํ‰๊ฐ€ == A) {
  // A์ผ ๋•Œ code
} else if(ํ‰๊ฐ€ == B) {
  // B์ผ ๋•Œ code
}
// ๊ณผ์ผ ๊ฐ€๊ฒฉ ์•Œ๋ ค์ฃผ๊ธฐ
let fruit = prompt("๋ฌด์Šจ ๊ณผ์ผ์˜ ๊ฐ€๊ฒฉ์ด ๊ถ๊ธˆํ•œ๊ฐ€์š”?");

switch(fruit) {
  case "ํ™์˜ฅ" :
    console.log("100์›์ž…๋‹ˆ๋‹ค.");
    break;
  case "๋ณต์ˆญ์•„" :
    console.log("200์›์ž…๋‹ˆ๋‹ค.");
    break;
  case "๋ฐฐ" :
    console.log("300์›์ž…๋‹ˆ๋‹ค.");
    break;
  case "๋ฉœ๋ก " :
  case "๊ทค" :
    console.log("400์›์ž…๋‹ˆ๋‹ค.");
    break;
  default :
    console.log("๊ทธ ๊ณผ์ผ์˜ ๊ฐ€๊ฒฉ์€ ๋ชจ๋ฆ…๋‹ˆ๋‹คใ…œใ…œ");
}

10. function

์ •์˜

์šฐ๋ฆฌ๋Š” ์ด๋ฏธ browser์— ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” ํ•จ์ˆ˜์ธ console, alert, confirm์„ ์‚ฌ์šฉํ•ด ๋ณธ ๋ฐ” ์žˆ๋‹ค.

function ํ•จ์ˆ˜๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜) {
  ํ•จ์ˆ˜์˜ ์‹คํ–‰ ์ฝ”๋“œ;
}

// ํ˜ธ์ถœํ•  ๋•
ํ•จ์ˆ˜๋ช…();

// ex.
function sayHello(name) {
  concole.log(`Hello, ${name}`);
}

sayHello("Mai");

ํ•จ์ˆ˜์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ์—†์„ ์ˆ˜๋„ ์žˆ๊ณ , 1๊ฐœ์ผ ์ˆ˜๋„ ์žˆ๊ณ , ์—ฌ๋Ÿฌ ๊ฐœ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ฐ„ํŽธํ•ด ์ง„๋‹ค.

function showError() {
  alert('๋‹ค์‹œ ์‹œ๋„ํ•ด ์ฃผ์„ธ์š”.');
}

showError();

์ฆ‰, ๋งค๋ฒˆ ์œ„ ๋‘ ์ค„์˜ code๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ showError();๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋ผ์„œ ํŽธ๋ฆฌํ•˜๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜

๋˜ํ•œ ์•„๋ž˜์™€ ๊ฐ™์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๋งŒ ๋ฐ”๊ฟ”์„œ ๋‹ค๋ฅธ ๊ฐ’์„ ๋„์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

function sayHello(name) {
  const msg = `Hello, ${name}`;
  console.log(msg);
}

sayHello("Mai"); // "Hello, Mai"
sayHello("Ian"); // "Hello, Ian"

์ง€์—ญ๋ณ€์ˆ˜์™€ ์ „์—ญ๋ณ€์ˆ˜

function sayHello(name) {
  let msg = "Hello";
  if(name) {
    msg += `, ${name}`;
  }
  console.log(msg);
}

sayHello();
sayHello("Mai"); // ์ด์ œ๋ถ€ํ„ฐ msg = "Hello, Mai"์ž„ โˆต ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ๊ฐ’์€ ๋ณต์‚ฌ๋œ ํ›„ ํ•จ์ˆ˜ ๋‚ด์˜ ์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ

// ์ง€์—ญ๋ณ€์ˆ˜์ธ msg๋ฅผ ํ•จ์ˆ˜ ๋ฐ–์—์„œ ํ˜ธ์ถœํ•˜๋ฉด ๋‹ค์Œ์˜ error๊ฐ€ ๋ฐœ์ƒํ•จ
console.log(msg); // "Uncaught ReferenceError: msg is not defined"

์ง€์—ญ๋ฒˆ์ˆ˜์™€ ์ „์—ญ๋ณ€์ˆ˜๋Š” ์„œ๋กœ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

let msg = "Welcome";
console.log(msg) // "Welcome"

function sayHello(name) {
  let msg = "Hello"
  console.log(msg + ' ' + name); // "Hello Mai"
}

sayHello("Mai");
console.log(msg) // ์œ„ code ๋‹ฌ๋ฆฌ ํ•จ์ˆ˜ ๋ฐ–์— ์žˆ๋Š” let์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ "Welcome"์ž„ ("Hello Mai"๊ฐ€ ์•„๋‹˜)

๋‹ค์‹œ ํ•œ๋ฒˆ ์–ธ๊ธ‰ํ•˜์ง€๋งŒ, ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ ๊ฐ’์€ ๋ณต์‚ฌ๋œ ํ›„ ํ•จ์ˆ˜ ๋‚ด์˜ ์ง€์—ญ๋ณ€์ˆ˜๊ฐ€ ๋˜๋ฏ€๋กœ ์ „์ฒด service์—์„œ ๊ณตํ†ต์œผ๋กœ ๋ฐ”๋ผ๋ด์•ผ ํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค. ์ „์—ญ๋ณ€์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋งŒ ๊ด€๋ฆฌํ•˜๊ธฐ ํž˜๋“œ๋ฏ€๋กœ ํ•จ์ˆ˜์— ํŠนํ™”๋œ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ ๊ฐ’ ์„ค์ •ํ•˜๊ธฐ

// (1)
function sayHello(name) {
  let newName = name || "dude"; // : ๋งค๊ฐœ๋ณ€์ˆ˜ name์ด ์žˆ์œผ๋ฉด name์ด newName, name์ด ์—†์œผ๋ฉด "dude"
  let msg = `Hello, ${newName}`
  console.log(msg)
}

sayHello(); // "Hello, dude"
sayHello("Mai"); // "Hello, Mai"

// (2)
function sayHello(name = "dude") { // name์ด ์—†์œผ๋ฉด ํ• ๋‹น๋˜๋Š” "dude"
  let msg = `Hello, ${name}`
  console.log(msg)
}

sayHello(); // "Hello, dude"
sayHello("Mai"); // "Hello, Mai"

๋ฐ˜ํ™˜

function add(num1, num2) {
  return num1 + num2;
}

const result = add(4, 7);
console.log(result) // 11

return์ด ์—†๊ฑฐ๋‚˜ return;์ด๋ผ๊ณ ๋งŒ ํ•˜๋ฉด undefined์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ๋Š” ํ•œ๋‹ค. cf. ์œ„์—์„œ ํ–ˆ๋˜function showError()

return์€ ๊ทธ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์ข…๋ฃŒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๋ฅผ ์ข…๋ฃŒํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
ex.

function showError() {
  alert("์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.");
  return;
  alert("์ด code๋Š” ์ ˆ๋Œ€ ์‹คํ–‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.");
}

const result = showError();
console.log(result); // "์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ์•ˆ๋‚ด๊ฐ€ ์ ํžŒ ๊ฒฝ๊ณ ์ฐฝ

ํ•จ์ˆ˜๋Š” ํ•œ ๋ฒˆ์— ํ•œ ์ž‘์—…๋งŒ ํ•˜๋„๋ก code๋ฅผ ์งœ๋Š” ๊ฒŒ ์ข‹๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์œผ๋ฉด ๋‚˜๋ˆ„๋Š” ๊ฑธ ์ถ”์ฒœํ•œ๋‹ค.
๋ณ€์ˆ˜์ฒ˜๋Ÿผ ํ•จ์ˆ˜๋ช… ์—ญ์‹œ ใ…‡๋ฆญ๊ธฐ ์‰ฝ๊ณ  ์–ด๋–ค ๋™์ž‘์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ์ง“๋Š” ๊ฒŒ ์ข‹๋‹ค.
ex.
showError, getName, createUesrData, checkLogin ๋“ฑ


11. arrow function

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ๊ณผ ํ•จ์ˆ˜ ํ‘œํ˜„์‹

์œ„์—์„œ ์ž‘์„ฑํ•œ ํ•จ์ˆ˜๋Š” 'ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ'์ด๊ณ , ์ด ์™ธ์— 'ํ•จ์ˆ˜ ํ‘œํ˜„์‹'์ด ์žˆ๋‹ค.
์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  function() {console.log("Hello");}
์ด ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ํ• ๋‹นํ•จ let sayHello

// ์ฆ‰
let sayHello = function() {
  console.log("Hello");
}

sayHello();

// ์œ„์˜ code๋Š” ์•„๋ž˜์˜ ํ•จ์ˆ˜์™€ ๋™์ผํ•˜๋ฉฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹์ด๋‚˜ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ์‹์ด ๋™์ผํ•จ
function sayHello() {
  console.log("Hello");
}

sayHello();

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ๊ณผ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์˜ ์ฐจ์ด

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ๊ณผ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์˜ ์ฐจ์ด๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” timing์ด๋‹ค.
ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ hoisting ๋•๋ถ„์— ์–ด๋””์—์„œ๋‚˜ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ํ•จ์ˆ˜๋ณด๋‹ค ํ˜ธ์ถœ์ด ๋จผ์ € ์ฝํžˆ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธด๋‹ค.

JavaScript๋Š” ์œ„์—์„œ ์•„๋ž˜๋กœ ํ•œ ์ค„์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ ์ฆ‰์‹œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” interpreted language์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ์˜ code๋Š” ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธด๋‹ค.

console.log(num); // ์•„์ง let์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋‚˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— "Error. num is not defined"์ด๋ผ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค.
let num = 1;

ํ•˜์ง€๋งŒ ๋‹ค์Œ์˜ code๋Š” ์˜ค๋ฅ˜ ์—†์ด ๊ฒฐ๊ณผ๊ฐ€ ์ž˜ ๋‚˜์˜จ๋‹ค.

sayHello();
function sayHello() {
  console.log("Hello");
}

๊ทธ ์ด์œ ๋Š” JavaScript๊ฐ€ interpreted language์ด๊ธฐ๋Š” ํ•˜์ง€๋งŒ JS๊ฐ€ code์˜ ๋ชจ๋“  ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์„ ์ฐพ์•„์„œ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด ๋‘๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. (hoisting)

ํ•˜์ง€๋งŒ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ code์— ๋„๋‹ฌํ•ด์•ผ ์ƒ์„ฑ๋ผ๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์ „์— ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊ธฐ๋ฏ€๋กœ ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋œ ํ›„์— ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ž˜์„œ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์ด ์ž์œ ๋„๊ฐ€ ๋” ๋†’๋‹ค.

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ๋ณ€๊ฒฝํ•˜๊ธฐ

// (1)
let sayHello = (name) => `Hello, ${name}` // ์ธ์ˆ˜๊ฐ€ ํ•˜๋‚˜๋ฉด ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค.
โ†“
let sayHello = name => `Hello, ${name}`

// (2)
let showError = () => { // ์ธ์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์—†๋‹ค.
  alert("error");
}
// ์กฐ๊ธˆ ๋” ๊ธด ์˜ˆ์ œ
// (1)
function showError() {
  console.log("error");
};
โ†“
let showError() => {
  console.log("error");
};

// (2)
const sayHello = function (name) {
  const msg = `Hello, ${name}`;
  console.log(msg);
};
โ†“
const sayHello = (name) => {
  const msg = `Hello, ${name}`;
  console.log(msg);
};

// (3)
const add = function(num1, num2) {
  const result = num1 + num2;
  return result;
};
โ†“
const add = (num1, num2) => {
  const result = num1 + num2;
  return result;
};
โ†“
const add = (num1, num2) => (num1 + num2);
โ†“
const add = (num1, num2) => num1 + num2; // return๊ณผ ์ค‘๊ด„ํ˜ธ๋ฅผ ์—†์• ๋ฉด์„œ ์†Œ๊ด„ํ˜ธ๋ฅผ ์ ์–ด์•ผ ํ•˜๋Š”๋ฐ, return๋ฌธ์ด ํ•œ ์ค„์ด๋ผ๋ฉด ์ด ๋งˆ์ €๋„ ํ•„์š” ์—†์Œ, ์ค‘๊ด„ํ˜ธ ๋ฐ”๋กœ ๋‹ค์Œ์— return์ด ์˜ค๋ฉด return๊ณผ ์ค‘๊ด„ํ˜ธ๋ฅผ ์—†์•จ ์ˆ˜ ์žˆ์œผ๋‚˜ return ์ „์— ์—ฌ๋Ÿฌ ์ค„์˜ code๊ฐ€ ์žˆ์œผ๋ฉด return๊ณผ ์ค‘๊ด„ํ˜ธ๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์—†์Œ

12. object

์ƒ์„ฑ

// ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ '๊ฐ์ฒด literal'์ด๋ผ๊ณ  ํ•จ
const superman = {
  name : "clark",
  age : 30,
}

์ ‘๊ทผ

const superman = {
  name : "clark",
  age : 30,
}

// ๊ฐ property์— ์ ‘๊ทผํ•ด ๋ณด๋ฉด
console.log(superman.name) // clark
console.log(superman["age"]) // 30

// ๊ฐ์ฒด ์ž์ฒด๋ฅผ ๋ถˆ๋Ÿฌ๋ณด๋ฉด
console.log(superman)
// โฌ‡๏ธ Output
// Object {
//   age: 30,
//   name: "clark"
// }

์ˆ˜์ •

// (1) ์ถ”๊ฐ€
const superman = {
  name : "clark",
  age : 30,
}

superman.hairColor = "black";
superman["hobby"] = "footbal";
console.log(superman);
// โฌ‡๏ธ Output
// Object {
//   age: 30,
//   hairColor: "black"
//   hobby: "football"
//   name: "clark"
// }

// (2) ์‚ญ์ œ
const superman = {
  name : "clark",
  age : 30,
}

delete superman.age;
console.log(superman)
// โฌ‡๏ธ Output
// Object {
//   name: "clark"
// }

ํ•จ์ˆ˜๋กœ property๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐ์ฒด update

function makeObject(name, age) {
  return {
    name,
    age,
    hobby: "ballet"
  };
}

const Mai = makeObject("Mai", 30);
console.log(Mai);
// โฌ‡๏ธ Output
// Object {
//   age: "30"
//   hobby: "ballet"
//   name: "Mai"
// }

ํ™•์ธ

function makeObject(name, age) {
  return {
    name,
    age,
    hobby: "ballet"
  };
}

const Mai = makeObject("Mai", 30);
console.log(Mai);

// key๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ
console.log("age" in Mai); // trute
console.log("birthday" in Mai); // false

์ด๋ฅผ ํ™œ์šฉํ•ด ์„ฑ๋…„์ด ์ง€๋‚ฌ๋Š”์ง€ ํ™•์ธํ•˜๋Š” code ์ž‘์„ฑ ๊ฐ€๋Šฅ

// key ๊ฐ’์— ๋‚˜์ด๊ฐ€ ์—†์œผ๋ฉด ์ผ๋‹จ false๋กœ ๋ฐ˜ํ™˜ํ•˜๊ธฐ
function isAdult(user) {
  if(!("age" in user) || user.age < 20) {
// ๊ทธ๋ƒฅ 'if (user.age < 20) {' ์ด๋ ‡๊ฒŒ๋งŒ ํ•˜๋ฉด 'age๊ฐ€ ์—†๋Š” ๊ฒƒ์ด 20๋ณด๋‹ค ์ž‘์Œ'์œผ๋กœ ์ฒ˜๋ฆฌ๋ผ์„œ true๊ฐ€ ๋˜์–ด๋ฒ„๋ฆฌ๋ฏ€๋กœ 'age'๊ฐ€ ์—†๋Š” ๊ฒƒ์„ false๋กœ ๋ฐ˜ํ™˜ํ•˜๋ผ๋Š” ๊ฒƒ์„ ์ ์–ด์ค˜์•ผ ํ•จ : '!("age" in user)'
    return false;
  }
  return true;
}

const Ian = {
  name : "Ian",
  age : 30
};

const Mai = {
  name : "Mai"
};

console.log(isAdult(Ian)) // true
console.log(isAdult(Mai)) // false

โœ”๏ธ for ... in

const superman = {
  name : "clark",
  age : 30,
}

for (key in superman) {
  console.log(key) // "name", "age"
}

for (key in superman) {
  console.log(superman[key]) // "clark", "30"
}

13. object - method, this

method

๊ฐ์ฒด property๋กœ ํ• ๋‹น๋œ ํ•จ์ˆ˜

const superman = {
  name : "clark",
  age : 33,
  fly : function() { // fly()๊ฐ€ 'superman' ๊ฐ์ฒด์˜ method : superman.fly() (' : function'์€ ์ƒ๋žต ๊ฐ€๋Šฅ)
    console.log("๋‚ ์•„๊ฐ‘๋‹ˆ๋‹ค.")
  }
}

method์— property๋ฅผ ๋„ฃ์œผ๋ ค๋ฉด

const user = {
  name : "Mai",
  sayHello : function() {
  	console.log(`Hello, I'm ${user.name}`);
  }
}

user.sayHello(); // "Hello, I'm Mai"

Hello, I'm ${user.name} ๋Œ€์‹  Hello, I'm ${this.name}์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
ํ•˜์ง€๋งŒ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด this๊ฐ€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฅดํ‚ค์ง€ ์•Š๊ณ  ์ „์—ญ ๊ฐœ์ฒด๋ฅผ ๊ฐ€๋ฆฌ์ผœ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.
์™œ๋ƒํ•˜๋ฉด ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ๋‹ฌ๋ฆฌ ์ž์‹ ๋งŒ์˜ this๊ฐ€ ์—†์–ด์„œ this๋ฅผ ์“ฐ๋ฉด window (browser) ๋‚˜ global (Node.js) ์„ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ณ€์ˆ˜๋กœ ํ•˜๋‚˜์˜ ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

let boy = {
  name : "Ian",
  showName : function () {
    console.log(boy.name)
  }
}

let guy = boy;

guy.showName(); // "Ian"

guy.name = "Nick"
console.log(boy.name); // "Nick"

this

method์—์„œ ๊ฐ์ฒด๋ช…์„ ์จ์ฃผ๊ธฐ๋ณด๋‹ค this๋ฅผ ์“ฐ๋Š” ๊ฒŒ ์ข‹์€ ์ด์œ ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

let boy = {
  name : "Ian",
  showName : function () {
    console.log(boy.name)
  }
}
// ์œ„์ฒ˜๋Ÿผ method์— ๊ฐ์ฒด๋ช…์„ ์“ฐ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ–ˆ์„ ๋•Œ method๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ์˜ค๋ฅ˜๊ฐ€ ์ƒ๊น€
let guy = boy;
boy = null; // boy๊ฐ€ null์ด๋‹ˆ๊นŒ guy๋กœ๋งŒ ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ

guy.showName(); // "Uncaught TypeError: Cannot read property 'name' of null"

// โ†“ ๋ฐ˜๋ฉด
let boy = {
  name : "Ian",
  showName : function () {
    console.log(this.name)
  }
}
// ์œ„์™€ ๊ฐ™์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ–ˆ์„ ๋•Œ
let guy = boy;
boy = null; // boy๊ฐ€ null์ด๋‹ˆ๊นŒ guy๋กœ๋งŒ ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ

guy.showName(); // "Ian"

ํ•˜์ง€๋งŒ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด (browser์—์„œ) Window๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋ฟ, ๊ฐ์ฒด๋ฅผ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๋Š”๋‹ค.

let boy = {
  name : "Ian",
  sayThis : function () {
	console.log(this);
	}
};

boy.sayThis();
// โฌ‡๏ธ Output
// Object {
//   name: "Ian",
//   sayThis : function () {โ†”๏ธŽ}
//}

// โ†“ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ๋ฐ”๊พธ๋ฉด
let boy = {
  name : "Ian",
  sayThis : () => {
    console.log(this);
  }
};

boy.sayThis()
// โฌ‡๏ธ Output
// Window

๊ทธ๋Ÿฌ๋ฏ€๋กœ this๋กœ ๊ฐ์ฒด์— ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค๋ฉด method์— ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค.


14. array

์ •์˜

์ˆœ์„œ๊ฐ€ ์žˆ๋Š” list

let days = ["mon", "tue", "wed", "thu"];

console.log(daysp[3]); // "thu"

days[3] = "๋ชฉ์š”์ผ"
console.log(days); // ["mon", "tue", "wed", "๋ชฉ์š”์ผ"]

ํŠน์ง•

๋ฐฐ์—ด์€ ๋ฌธ์ž, ์ˆซ์ž, ๊ฐ์ฒด, ํ•จ์ˆ˜ ๋“ฑ์„ ๋ชจ๋‘ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ๋ฐ˜๋ณต์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค.

โœ”๏ธ length

๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

let days = ["mon", "tue", "wed", "thu"];
console.log(days.length); // 4

โœ”๏ธ method

  • push() : ๋ฐฐ์—ด ๋์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€
  • pop() : ๋ฐฐ์—ด ๋์˜ ์š”์†Œ๋ฅผ ์ œ๊ฑฐ
  • unshift() : ๋ฐฐ์—ด ๋งจ ์•ž์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€
  • shift() : ๋ฐฐ์—ด ๋งจ ์•ž์˜ ์š”์†Œ๋ฅผ ์ œ๊ฑฐ
let days = ["mon", "tue", "wed", "thu"];

days.push("fri");
console.log(days); // ["mon", "tue", "wed", "thu", "fri"]

days.unshift("sun");
console.log(days); // ["sun", "mon", "tue", "wed", "thu", "fri"]

โœ”๏ธ for

let days = ["mon", "tue", "wed", "thu"];

days.push("fri");
days.unshift("sun");

for (let index = 0 ; index < days.length; index++) {
  console.log(days[index]);
}

// โฌ‡๏ธ Output
// "sun"
// "mon"
// "tue"
// "wed"
// "thu"
// "fri"

โœ”๏ธ for ... of

array ์—ญ์‹œ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ์— for ... in์„ ์‚ฌ์šฉํ•ด๋„ ๋˜์ง€๋งŒ ๋‹จ์ ์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— for ... of๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
๐Ÿง ์–ด๋–ค ๋‹จ์ ์ด ์žˆ๋Š” ๊ฑฐ์ง€์ด...? ๐Ÿง

for ... of๋Š” for๋ณด๋‹ค ๊ฐ„๋‹จํ•˜์ง€๋งŒ index๋ฅผ ์–ป์„ ์ˆ˜ ์—†๋‹ค.

let days = ["mon", "tue", "wed", "thu"];

days.push("fri");
days.unshift("sun");

for (let ddd of days) {
  console.log(ddd);
}

// โ†“ Output
// "sun"
// "mon"
// "tue"
// "wed"
// "thu"
// "fri"




Endnote

๐Ÿ™‡ the source of this content

์ฝ”๋”ฉ์•™๋งˆ

profile
๋Š๋ ค๋„ ํ•  ๊ฑฐ์•ผ.......

0๊ฐœ์˜ ๋Œ“๊ธ€