๐Ÿ’ช JavaScript w/ ์ƒํ™œ์ฝ”๋”ฉ

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

1-2. Today I Learned. JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
1/8
post-thumbnail

Preface

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

ํ˜„์žฌ ์ƒํƒœ
์•„์ง CSS๋„ ๋ชจ๋ฅด๊ฒ ๋Š”๋ฐ ๊ฐ‘์ž๊ธฐ ๋ถ„์œ„๊ธฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ.
์•„๋ฌด๋ฆฌ FE์˜ ๊ธฐ๋ณธ์ด HTML5, CSS3, JavaScript๋ผ์ง€๋งŒ... ํ•œ ์ฃผ ๋™์•ˆ ์ด ์„ธ ๊ฐ€์ง€ ๋ถ„์•ผ์˜ ์ง€์‹์„ ๋จธ๋ฆฌ์— ๋งˆ๊ตฌ ์‘ค์…”๋„ฃ๋Š” ์ค‘
์ˆ˜์ค€๋ณ„(?) ๊ฐ•์˜๋ฅผ ํ•ด์ฃผ์‹œ๊ธฐ๋Š” ํ•˜์ง€๋งŒ ๋ชจ๋“  ๊ฒŒ ์™ธ๊ณ„์–ด์ฒ˜๋Ÿผ ๋“ค๋ฆฐ๋‹ค.
ํ•œ๊ตญ์–ด๋กœ ๋ง์”€ํ•˜์‹œ๋ฉด ์ œ๊ฐ€ ์•Œ์•„๋“ค์„ ์ค„ ์•„์…จ๋‚˜์š”...ใ…œvใ…œ
๋งˆ์น˜ '์–ด๋‘  ์†์˜ ๋Œ€ํ™”'๋ฅผ ์ฒดํ—˜ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค... ์•ž์ด ๋ณด์ด์ง€ ์•Š์•„...! ๊ฐœ๋… ๊ณต๋ถ€, ์ด๋ก  ๊ณต๋ถ€ ์—ด์‹ฌํžˆ ํ•ด์•ผ์ง€.

๊ทธ ์ „์— ํ•˜์†Œ์—ฐ์„ ํ•˜๊ณ  ๋„˜์–ด๊ฐ€์ž๋ฉด, ์•„๋‹ˆ JavaScript๋Š” ๋™์ž‘์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฑฐ๋ผ๋ฉด์„œ ์™œ ์ž๊พธ function์„ ์จ์•ผ ํ•˜๋Š” ๊ฑธ๊นŒ ๐Ÿ˜ข.
๋ณ€์ˆ˜๋ฅผ ์ด๋ž˜์ €๋ž˜ ๋„ฃ์–ด์„œ ์–ด์งธ์ €์งธ ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ž‘ ์‚ฌ์šฉ์ž๊ฐ€ button์„ ํด๋ฆญํ•˜๋Š” ๊ฑฐ๋ž‘ ๋ฌด์Šจ ์ƒ๊ด€์ธ ๊ฑธ๊นŒ ๐Ÿ˜ข.
๋‹น์ตœ ์™œ ์—ฌ๊ธฐ์—์„  ์ค‘๊ด„ํ˜ธ๋ฅผ ์“ฐ๊ณ  ๊ฐ‘์ž๊ธฐ ์™œ ์ฝœ๋ก ์„ ์“ฐ๋ฉฐ ๋ฐฑํŒ์€ ๋˜ ์™œ ํŠ€์–ด๋‚˜์˜ค๋Š” ๊ฑธ๊นŒ ๐Ÿ˜ข.
๋‚˜๋„ ๊ฐ™์€ code๋ฅผ ์ ์€ ๊ฒƒ ๊ฐ™์€๋ฐ ์™œ ๋‚˜๋งŒ undefined์ธ ๊ฑธ๊นŒ ๐Ÿ˜ข.

โž• afterthought

๊ฐœ๋… ๊ณต๋ถ€, ์ด๋ก  ๊ณต๋ถ€ ํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ํ•ด๋†“๊ณ  ๋‚ด๊ฐ€ ๋งŒ์กฑํ•  ๋งŒํผ ํ•˜์ง€ ๋ชปํ•œ ์ฒด DOM, React, BE์™€์˜ ํ†ต์‹ ๊นŒ์ง€ ์ง„๋„๊ฐ€ ๋‚˜๊ฐ€๋ฒ„๋ ค์„œ ๋งŽ์ด ํž˜๋“ค์—ˆ๋‹ค. ๋ญ”๊ฐ€๋ฅผ ํ•˜๊ณ ๋Š” ์žˆ๋Š”๋ฐ ๊ทธ๊ฒŒ ๋ญ”์ง€๋ฅผ ๋ชจ๋ฅด๊ฒ ์–ด์„œ ๋งˆ์น˜ ์‹คํƒ€๋ž˜๊ฐ€ ์–ฝํžˆ๊ณ  ์–ฝํ˜€ ํ’€๊ธฐ ์–ด๋ ค์šด ์‹ค๋ญ‰์น˜ ๋ฉ์–ด๋ฆฌ๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™๋‹ค. ์ด๋ ‡๊ฒŒ ๋ง‰๋ง‰ํ–ˆ๋˜ 2๊ฐœ์›”์„ ๋ณด๋‚ธ 10์›” 7์ผ ํ˜„์žฌ, JavaScript๋ฅผ ๋‹ค์‹œ ๋ณด๊ณ  ์žˆ์ž๋‹ˆ ์ด์ œ์„œ์•ผ JavaScript์˜ J ์ •๋„ ์•Œ ๊ฒƒ ๊ฐ™๋‹ค. ํœด...



JavaScript

1. intro

JavaScript๋Š” HTML ์œ„์— ๋งŒ๋“ค์–ด์ง„ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— JS๋ฅผ HTML์— ์ž˜ rendez-vous์‹œ์ผœ์•ผ ํ•œ๋‹ค.
๊ทธ ์˜๋ฏธ๋กœ <script>๋ผ๋Š” tag๋ฅผ ์‚ฌ์šฉํ•ด JS๋ฅผ ์ด tag ์•ˆ์— ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.
JS์˜ event ์†์„ฑ์„ ์‚ฌ์šฉํ•ด ๋”์šฑ ๋” ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” web์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
ex.onclick, onchange, onkeydown...


2. console

๊ฐœ๋ฐœ์ž๋„๊ตฌ์˜ Console tab์—์„œ JavaScript๋ฅผ ์ฆ‰์‹œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ํ†ตํ•ด ๋‚ด๊ฐ€ ์˜๋„ํ•œ ๋Œ€๋กœ code๊ฐ€ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ๋„ ํ•˜๊ณ  ์ฆ‰์„์—์„œ code๋ฅผ ์ˆ˜์ •ํ•ด web์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™๋ ์ง€ ์ ์šฉํ•ด ๋ณด๊ธฐ๋„ ํ•œ๋‹ค.
Console tab์—์„œ ์ž‘์„ฑํ•˜๋Š” code๋Š” ์‹ค์ œ web์—๋Š” ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
์ฐธ๊ณ ๋กœ Elements tab์—์„œ ESC key๋ฅผ ๋ˆ„๋ฅด๋ฉด Console tab์ด ๋œฌ๋‹ค.


3. data types

JS์—๋Š” ์—ฌ์„ฏ ๊ฐ€์ง€ ์ž๋ฃŒํ˜•์ด ์žˆ๋Š”๋ฐ, ์ด๋Š” typeOf ์—ฐ์‚ฐ์ž๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
ใ„ด number, string, boolean, null, bigint, symbol
ใ„ด console.log(typeof 100); // "number"
๏พ ๏พ console.log(typeof msg); // "string"
์ด ์™ธ์— object, function, null ๋“ฑ์˜ ์„ธ ๊ฐ€์ง€์˜ ๊ตฌ์กฐ ์œ ํ˜•์ด ์žˆ๋‹ค.
ใ„ด console.log(typeof null); // "object" โˆต null ์€ ๋นˆ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ
ใ„ด console.log(console.log(typeof []); // "object" โˆต ๋ฐฐ์—ด์€ ํ™•์žฅ๋œ ๊ฐ์ฒด์ด๊ธฐ ๋•Œ๋ฌธ
Stringํ˜•๊ณผ Numberํ˜•์„ ์—ฐ์‚ฐํ•˜๋ฉด ํ•ญ์ƒ Stringํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ฏ€๋กœ ์—ฐ์‚ฐํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•œ๋‹ค.
String์€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•œ๋‹ค.
ใ„ด js != JS
string๊ณผ array์—์„œ๋Š” .length ์†์„ฑ์„ ์“ธ ์ˆ˜ ์žˆ์ง€๋งŒ number๋Š” ์•ˆ ๋ผ์„œundefined๊ฐ€ ๋œจ๋ฏ€๋กœ ์ „ํ™”๋ฒˆํ˜ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ™์€ ๊ฑธ ํ•  ๋• ๋ฒˆํ˜ธ๋ฅผ ๋ฌธ์ž์—ด๋กœ ๋ฐ”๊ฟ”์ฃผ์–ด์•ผ ํ•œ๋‹ค.
ใ„ด ์ˆซ์ž๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ :number(), parseInt(), parseFloat()
ใ„ด ๋ฌธ์ž๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์„ ๋•Œ :.toString()
MDN docs


4. variable, assignment operator, binary operator

x = 1์—์„œ 'x'๊ฐ€ ๋ณ€์ˆ˜, '='๊ฐ€ ๋Œ€์ž…์—ฐ์‚ฐ์ž์ด๋‹ค.
๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋• let (๋ณ€์ˆ˜ ์ƒ์„ฑ ๋ฐ ์ƒ์„ฑ ํ›„ ๊ฐ’ ์ˆ˜์ • ๊ฐ€๋Šฅ)๊ณผ const (๊ฐ’ ์ˆ˜์ • ๋ถˆ๊ฐ€๋Šฅ)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ–ˆ์œผ๋ฉด ๊ฐ’์„ ํ• ๋‹น (์ดˆ๊ธฐํ™”) ํ•ด์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ณ€์ˆ˜์˜ ๊ฐ’์ด undeifned๊ฐ€ ๋œ๋‹ค.
๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์ด์œ ๋Š” ๋ณ€์ˆ˜ ํ•˜๋‚˜๋งŒ ์ž˜ ์„ค์ •ํ•˜๋ฉด ๋งŽ์€ data๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•  ๋•Œ ๋ณ€์ˆ˜๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋ผ์„œ ๊ฐ„ํŽธํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
(var, let, const์— ๊ด€ํ•œ ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ์—์„œ ํ’€์—ˆ๋‹ค. link)

์ฐธ๊ณ ๋กœ ๊ฐ์ฒด์— ์‚ฌ์šฉ๋œ ๋ณ€์ˆ˜๋Š” property๋ผ๊ณ  ํ•˜๋ฉฐ property ์‚ฌ์ด์—” ','๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
{} (block) ๋‚ด๋ถ€์—์„œ ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉด ๋ณ€์ˆ˜๋Š” ์˜ค๋กœ์ง€ block ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
function, for๋ฌธ, if๋ฌธ ๋‚ด๋ถ€์˜ {}๋„ ๋ชจ๋‘ block์ด๋‹ค.
block ๋‚ด๋ถ€์—์„œ ์ •์˜๋œ ๋ณ€์ˆ˜๋ฅผ 'local (์ง€์—ญ) ๋ณ€์ˆ˜'๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
global ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋ ๋•Œ๊นŒ์ง€ ๊ณ„์† ์‚ด์•„์žˆ๋‹ค.
ใ„ด ์ด ๋ง์€ local ๋ณ€์ˆ˜๋Š” block์ด ๋๋‚˜๋ฉด ๋” ์ด์ƒ ์‚ด์•„์žˆ์ง€ ์•Š๊ณ  ์“ธ ์ˆ˜ ์—†๋‹ค๋Š” ๋ง์ด๋‹ค.
global ๋ณ€์ˆ˜๊ฐ€ ์—ฌ๊ธฐ์ €๊ธฐ์„œ ์ˆ˜์ •๋˜๋ฉด code ์•ˆ์ •์„ฑ์— ์ข‹์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜๋“ค์€ ์ตœ๋Œ€ํ•œ block scope์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒŒ ์ข‹๋‹ค.
๊ฐ€๊ธ‰์  global ๋ณ€์ˆ˜๋Š” ์“ฐ์ง€ ์•Š๋„๋ก ๋…ธ๋ ฅํ•ด์•ผ ํ•˜๊ณ , ์ตœ๋Œ€ํ•œ {} ๋‚ด์—์„œ let, const ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์„œ ์“ฐ์ž.

JS์—์„œ๋Š” 'x = 1'์€ 'x๋Š” 1์ด๋‹ค.'๊ฐ€ ์•„๋‹ˆ๋ผ 'x์— 1์„ ๋Œ€์ž…/์ €์žฅํ•œ๋‹ค.'์ด๋‹ค.
ํ˜น์€ 'x = 1'์„ ''x'๋ผ๋Š” ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๊ณ  ๊ทธ๊ณณ์— 1์ด๋ผ๋Š” ๊ฐ’์„ ์ €์žฅํ•ด๋‘”๋‹ค.'๋กœ ํ‘œํ˜„ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

์—ฐ์‚ฐ์ž ์ค‘ +, ===์ฒ˜๋Ÿผ ์–‘์ชฝ์˜ ๊ฐ’์„ ์—ฐ์‚ฐํ•˜๋Š” ๊ฒƒ์€ ์ดํ•ญ์—ฐ์‚ฐ์ž์ด๋‹ค.
+ ๋“ฑ์€ ์ดํ•ญ ์—ฐ์‚ฐ์ž ์ค‘์—์„œ ์‚ฐ์ˆ˜๋ฅผ ํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฐ์ˆ  ์—ฐ์‚ฐ์ž๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.


โœ“ programming

HTML๊ณผ JS๋Š” ๋ชจ๋‘ computer ์–ธ์–ด์ด๋‹ค.
์ด ์ค‘ JS๋Š” computer ์–ธ์–ด์ž„๊ณผ ๋™์‹œ์— computer programming ์–ธ์–ด์ด๋‹ค.
program์—๋Š” '์ˆœ์„œ'๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ๊ณ , ์ด ์ˆœ์„œ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒŒ programming์ด๋‹ค.
ex. orchestra program
์ฆ‰ computer programming์ด๋ž€ ์‹œ๊ฐ„์˜ ์ˆœ์„œ์— ๋”ฐ๋ผ ์‹คํ–‰๋˜์–ด์•ผ ํ•  ๊ธฐ๋Šฅ์„ programming ์–ธ์–ด์˜ ๋ฌธ๋ฒ•์— ๋งž๊ฒŒ ๊ธ€๋กœ ์ ์€ ๊ฒƒ์ด๋‹ค.


5. comparison operator, boolean

๋น„๊ต์—ฐ์‚ฐ์ž์˜ ๊ฐ’์ด boolean (true or false) ์ด๋‹ค.
๋น„๊ต์—ฐ์‚ฐ์ž๋ฅผ ํ™œ์šฉํ•จ์œผ๋กœ์จ coding์ด ๋‹จ์ˆœ ๋ฐ˜๋ณต์—์„œ ํ•ด๋ฐฉ๋  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
boolean์ด true๋ƒ false๋ƒ์— ๋”ฐ๋ผ ์‹คํ–‰๋˜๋Š” code๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.
ใ„ด true

  • ๋ฌธ์ž์—ด : ๋น„์–ด ์žˆ์ง€ ์•Š์€ ๋ชจ๋“  ๋ฌธ์ž์—ด
  • ์ˆซ์ž : 0์ด ์•„๋‹Œ ๋ชจ๋“  ์ˆซ์ž
  • ๊ฐ์ฒด : ๋ชจ๋“  ๊ฐ์ฒด ({ }, [ ] ํฌํ•จ)

ย ย ย ย false

  • ๋ฌธ์ž์—ด : " " (๋นˆ๋ฌธ์ž์—ด)
  • ์ˆซ์ž : 0, NaN
  • ๊ฐ์ฒด : null
  • undefined

6. conditional statements

๋น„๊ต์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ programming์œผ๋กœ ๋ฐ˜๋ณต ์ž‘์—…์ด ์ˆ˜์›”ํ•ด์กŒ๋Š”๋ฐ, ์—ฌ๊ธฐ์— ๋”ํ•ด ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์ด ์‹คํ–‰๋˜๊ฒŒ ํ•จ์œผ๋กœ์จ ๋‹จ์ˆœ ๋ฐ˜๋ณต ์ด์ƒ์˜ ๋” ๋ณต์žกํ•œ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

โ†“ if๋ฌธ์˜ ํ˜•์‹

if (boolean type data){
  true๋ฉด ์‹คํ–‰ํ•  code
} false๋ฉด ์‹คํ–‰ํ•  code;

โ†“ ๊ณต์‹ ๋ฌธ์„œ์—๋Š”
if (condition) {
  condition์ด ์ฐธ์ด๋ฉด ์‹คํ–‰ํ•  code
} else {
  ๋Œ€์‹  ์‹คํ–‰ํ•  code
}

else if๋ฌธ ๋“ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ code๊ฐ€ ์ž‘์„ฑ๋œ ์ˆœ์„œ๋Œ€๋กœ ์กฐ๊ฑด์„ ๊ฒ€ํ† ๋˜๋ฏ€๋กœ ์กฐ๊ฑด๋ฌธ์€ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค.
์ฐธ๊ณ ๋กœ computer๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ, ์œ„์—์„œ ์•„๋ž˜๋กœ code๋ฅผ ์‹คํ–‰ํ•˜๋ฉฐ ๋น„๊ต์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ์„ ๋•Œ๋Š” ๋น„๊ต์—ฐ์‚ฐ์ž๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ code๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
MDN docs


โœ“ refactoring

refactoring์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž์™€ computer ๋ชจ๋‘์—๊ฒŒ ์žˆ๋Š” ๋น„ํšจ์œจ์„ ์ œ๊ฑฐํ•œ๋‹ค.
์œ ์ง€ใƒป๋ณด์ˆ˜์— ์ค‘์š”ํ•˜๋ฏ€๋กœ refactoring์€ ๊พธ์ค€ํžˆ, ์—ฌ๋Ÿฌ ์ฐจ๋ก€ ํ•ด์•ผ ํ•œ๋‹ค.

<input
  id="night_day"
  type="button"
  value="night"
  onclick="
  if (document.querySelector('#night_day').value === 'night')
   { document.querySelector('body').style.backgroundColor = 'black';
     document.querySelector('body').style.color = 'white';
     document.querySelector('#night_day').value = 'day';
   } else {
     document.querySelector('body').style.backgroundColor = 'white';
     document.querySelector('body').style.color = 'black';
     document.querySelector('#night_day').value = 'night';
   }
   ">

โ†“
๋ฐ˜๋ณต ์ œ๊ฑฐ
1) ๋ณธ์ธ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” 'document.querySelector('#night_day')'๋ฅผ 'this'๋กœ ์น˜ํ™˜
2) ๋ฐ˜๋ณต๋˜๋Š” 'document.querySelector('body')'๋ฅผ ๋ณ€์ˆ˜ var์— ์ €์žฅ

<input
  id="night_day"
  type="button"
  value="night"
  onclick="
   var target = document.querySelector('body');
     if (this.value === 'night')
      { target.style.backgroundColor = 'black';
        target.style.color = 'white';
        this.value = 'day';
      } else {
        target.style.backgroundColor = 'white';
        target.style.color = 'black';
        this.value = 'night';
      }
      ">

7. array

๋ฌผ๊ฑด์ด ๋งŽ์„ ๋•Œ ๋ฌผ๊ฑด ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ๊ธฐ์–ตํ•˜๊ธฐ๋ณด๋‹ค ๋งŽ์€ ๋ฌผ๊ฑด์„ ๊ฐ์ข… ์ˆ˜๋‚ฉ ์ƒ์ž์— ๋ณด๊ด€ํ•ด ๋ฌผ๊ฑด์ด ๋‹ด๊ฒจ์žˆ๋Š” ์ˆ˜๋‚ฉ ์ƒ์ž๋ฅผ ๊ธฐ์–ตํ•˜๋ฉด ํŽธํ•˜๋‹ค.
๋งˆ์ฐฌ๊ฐ€์ง€๋กœ data๋ฅผ ๋ฐฐ์—ด์ด๋ผ๋Š” ์ˆ˜๋‚ฉ ์ƒ์ž์— ๋ณด๊ด€ํ•˜๋ฉด ํ•ด๋‹นํ•˜๋Š” ๋ฐฐ์—ด๋งŒ ์ƒ๊ฐํ•˜๋ฉด ๋ผ์„œ ํŽธํ•˜๋‹ค.
ใ„ด 3๋ฒˆ์˜ MDN ๋ฌธ์„œ์—์„œ๋„ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฐฉ(collection)์— ๋น„์œ ํ–ˆ๋‹ค.
ใ„ด ๋ฐฐ์—ด์€ ๊ฐ์ฒด์ด๋‹ค.
๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ช‡ ์ฒœ ๊ฐœ์˜ ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜์— ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
ํ˜•์‹์€ []์ด๊ณ  ๋Œ€๊ด„ํ˜ธ ์•ˆ์— data๋ฅผ ๋‹ด๋Š”๋‹ค.
์ˆœ์„œ์— ๋”ฐ๋ผ ์ •๋ณด๋ฅผ ์ •๋ฆฌ์ •๋ˆํ•˜๋ฉฐ, index๋กœ data๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.
ใ„ด ๋ฐฐ์—ด์ด๋ฆ„[index]๋กœ ๋ฐฐ์—ด์— ์ ‘๊ทผํ•œ๋‹ค.
๋ฐฐ์—ด์˜ ๊ฐœ์ˆ˜๋Š” .length ์†์„ฑ์„, ๋ฐฐ์—ด์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” .push ์†์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค.
๋ฐฐ์—ด์„ ์กฐ์ž‘ํ•  ๋• index๋กœ ์ ‘๊ทผํ•˜์—ฌ ์ˆ˜์ •/์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ push, unshift method๋กœ ์ถ”๊ฐ€, pop method๋กœ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.
Array.map()์ธ map method๋Š” ๋ฐฐ์—ด์„ ๋ฐ˜๋ณตํ•ด์ฃผ๋Š”๋ฐ, callback ํ•จ์ˆ˜์—์„œ returnํ•œ ๊ฐ’์œผ๋กœ ๋งค ์š”์†Œ๋ฅผ ์ˆ˜์ •ํ•œ๋‹ค.
map method์˜ return ๊ฐ’์€ ์ˆ˜์ •๋œ ๊ฐ’์œผ๋กœ ๋‹ค์‹œ ์ƒ์„ฑ๋œ ๋ฐฐ์—ด์ด๋‹ค.


8. loop

codingํ•  ๋•Œ ๋™์ž‘์„ ๋ฐ˜๋ณต์‹œํ‚ค๊ณ  ์‹ถ๋‹ค๋ฉด code๋ฅผ ๋ฐ˜๋ณต์ ์œผ๋กœ ์ž‘์„ฑํ•ด๋„ ๋˜์ง€๋งŒ while์ด๋‚˜ for๊ฐ™์€ ์กฐ๊ฑด๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํ˜„๋ช…ํ•˜๋‹ค.
๋˜ํ•œ data๊ฐ€ ๋ฐ”๋€Œ์—ˆ๋‹ค๊ณ  logic์„ ๋ฐ”๊พธ์–ด์•ผ ํ•˜๋Š” code๋Š” ๋น„ํšจ์œจ์ ์ด๋ฏ€ ๋ณ€์ˆ˜, ๋น„๊ต์—ฐ์‚ฐ์ž, ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ์„ ํ™œ์šฉํ•ด ํšจ์œจ์„ ๋†’์ด์ž.

โ†“ while๋ฌธ์˜ ํ˜•์‹

while (boolean type data){
์กฐ๊ฑด์ด false๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ์‹คํ–‰๋˜๋Š” code (true์ธ ๋™์•ˆ ๊ณ„์† ์‹คํ–‰๋˜๋Š” code)
} false๊ฐ€ ๋˜๋ฉด ์ค‘๊ด„ํ˜ธ์—์„œ ๋‚˜์˜ค๋ฉด์„œ ๋ฐ˜๋ณต์ด ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์ด ์ž๋ฆฌ์— ์ง  ๋‹ค๋ฅธ code๊ฐ€ ์‹คํ–‰๋จ

โ†“ ๊ณต์‹ ๋ฌธ์„œ์—๋Š”

while (condition){
statement
}; 

๋ฐ˜๋ณต๋ฌธ์€ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๋Š” program์˜ ์‹คํ–‰ ์ˆœ์„œ, ์ฆ‰ ํ๋ฆ„์„ ์ œ์–ดํ•˜๋Š” ์ œ์–ด๋ฌธ์ด๋‹ค. w/ ์กฐ๊ฑด๋ฌธ
ํ•˜์ง€๋งŒ ์—ฐ์†์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ ์—ฐ์†์ ์ด์ง€ ์•Š์€ code๋ฅผ ๋ฐ˜๋ณต์‹œํ‚ค๊ณ  ์‹ถ์„ ๋• ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.

ย ย ย ย array & loop

<h1>Loop, Array</h1>
  <script>
    var fruites = ["strawberry", "fig", "orange", "melon"];
  </script>
  <h2>Fruites I Like</h2>
    <ul>
      <script>
        var i = 0;
        while (i < fruites.length) {
               document.write('<li><a href="http://fruites.com/'+fruites[i]+'">'+fruites[i]+'</a></li>');
            i = i + 1;
        }
      </script>
    </ul>

๐Ÿงโ“ ์œ„ ๋‚ด์šฉ์„ ๋ณด๋‹ค ๊ฐ‘์ž๊ธฐ ๋“ฑ์žฅํ•œ i๊ฐ€ ๊ถ๊ธˆํ–ˆ๋‹ค. ๊ทธ๋ž˜๋„ ์œ„ code์—์„œ์˜ i๋Š” ์ดํ•ด๊ฐ€ ๋˜์—ˆ๋Š”๋ฐ, ๋‹ค์Œ์˜ code์—์„œ๋Š” i์˜ ๋“ฑ์žฅ์ด ์ƒ๋šฑ๋งž๊ฒŒ ๋Š๊ปด์กŒ๋‹ค. ๐Ÿง

let count = 1;
for (let i = 0; i <= 5; i++) {    
  count = count + 1;
}

์ •๋‹ต์€ (๊ณต์‹ ๋ฌธ์„œ)์— ์žˆ์—ˆ๋‹ค.

โ†“ for๋ฌธ์˜ ํ˜•์‹

for ([initialization]; [condition]; [final-expression])
   statement; 

let i = 0์€ initialization, i <= 5๋Š” condition, i++์€ final-expression์ด๋‹ค.

  • initialization : ์ฃผ๋กœ counter ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ ๋ฐ˜๋ณต๋ฌธ์˜ ์ง€์—ญ ๋ณ€์ˆ˜๋กœ์„œ ์‹์˜ ๊ฒฐ๊ณผ๋Š” ๋ฒ„๋ ค์ง
  • condition : ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค ํ‰๊ฐ€ํ•  ์‹์œผ๋กœ์„œ ๊ฒฐ๊ณผ๊ฐ€ ์ฐธ์ด๋ฉด statement๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์ด ์‹์„ ๋„ฃ์ง€ ์•Š์•˜์„ ๋•Œ ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๋Š” ์–ธ์ œ๋‚˜ ์ฐธ์ด๋ฉฐ, ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๊ฑฐ์ง“์ด๋ฉด for๋ฌธ ๋ฐ”๋กœ ๋‹ค์Œ ์‹์œผ๋กœ ๊ฑด๋„ˆ๋œ€
  • final-expression : ๋งค ๋ฐ˜๋ณต ํ›„ ํ‰๊ฐ€ํ•  ์‹์œผ๋กœ์„œ ๋‹ค์Œ ๋ฒˆ condition ํ‰๊ฐ€ ์ด์ „์— ๋ฐœ์ƒํ•˜๋ฉฐ ์ฃผ๋กœ counter ๋ณ€์ˆ˜๋ฅผ ์ฆ๊ฐํ•˜๊ฑฐ๋‚˜ ๋ฐ”๊ฟ€ ๋•Œ ์‚ฌ์šฉ
โ†“ ๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ (๋ฐฐ์—ด ์ค‘ ์ตœ์†Œ๊ฐ’ ๊ตฌํ•˜๊ธฐ)

function findSmallestElement(arr) {
  if (arr.length === 0) {
    return 0;
  } else {
    let min = arr[0];
    for (let i = 0 ; i < arr.length ; i++){
      if (arr[i] < min) {
        min = arr[i];
      }
    } return min;
  }
}

9. function

๋ฐฐ์—ด์— ์ด์€ ๋˜ ๋‹ค๋ฅธ ์ˆ˜๋‚ฉ ์ƒ์ž์ด๋‹ค. (ํ”ํžˆ ์žํŒ๊ธฐ ํ˜น์€ ๋งˆ์ˆ  ์ƒ์ž๋กœ ๋น„์œ ๋˜๋Š” ๊ทธ๊ฒƒ์ด๋‹ค.)
์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
์‚ฌ์‹ค ๋ชจ๋“  JavaScript๋Š” function ๊ฐ์ฒด์ด๋‹ค.
ใ„ด function(){}.constructor === function์ด ture์ธ ๊ฒƒ์ด ๊ทธ ์ฆ๊ฑฐ์ด๋‹ค.
์ฐธ๊ณ ๋กœ 'ํ•จ์ˆ˜'๋Š” '๋ช…๋ น'์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ๊ฐ์ฒด์— ์†ํ•ด์žˆ๋Š” ํ•จ์ˆ˜๋Š” 'method'๋ผ๊ณ  ํ•œ๋‹ค.
ใ„ด document.querySelector('body')์—์„œ document๊ฐ€ ๊ฐ์ฒด, querySelector('body')๊ฐ€ ํ•จ์ˆ˜์ธ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์—์„œ๋Š” ๊ฐ์ฒด์— ์†ํ•œ ํ•จ์ˆ˜์ด๋ฏ€๋กœ querySelector('body')๋ฅผ method๋ผ ๋ถ€๋ฅธ๋‹ค.
๋ณ€์ˆ˜, ๋น„๊ต์—ฐ์‚ฐ์ž, ์กฐ๊ฑด๋ฌธ, ๋ฐ˜๋ณต๋ฌธ ๋“ฑ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋งŽ์€ code๋ฅผ ์ •๋ฆฌํ•  ๋•Œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์œ ์ง€ใƒป๋ณด์ˆ˜์— ์ข‹๋‹ค.
์œ„์—์„œ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธ/์ •์˜ํ•˜๊ณ , ์•„๋ž˜์—์„œ ํ˜ธ์ถœํ•œ๋‹ค.
ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋• ํ•จ์ˆ˜๋ช…()์ด๋ผ๊ณ  ์“ด๋‹ค.
ใ„ด ์„ ์–ธ๋งŒ ํ•˜๋ฉด ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ ๊ฒƒ์ผ ๋ฟ ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ˜ธ์ถœํ•ด์„œ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•œ๋‹ค.
ใ„ด ๋ณ€์ˆ˜์— ์–ด๋–ค ์ธ์ž๊ฐ€ ์ „๋‹ฌ๋ ์ง€๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ์˜์—ญ์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋„ฃ์œผ๋ฉด ์•ˆ ๋œ๋‹ค.

โ†“ function๋ฌธ์˜ ํ˜•์‹

function ๋‚ด๊ฐ€์ •ํ•œํ•จ์ˆ˜๋ช…(){
  ํ•จ์ˆ˜ ์‹คํ–‰ ๋‹จ์œ„ (์žฌ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ์ฝ”๋“œ)
  return ํ•จ์ˆ˜์—์„œ ๋ฐ˜ํ™˜ํ•  ๊ฐ’ (returnํ•  ๊ฒƒ์ด ์žˆ๋‹ค๋ฉด ์ž‘์„ฑ)
}


โ†“ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ์˜์—ญ์—์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋„ฃ์—ˆ์œผ๋ฏ€๋กœ ์•ˆ ์ข‹์€ ์˜ˆ์‹œ

function alertSigninSuccess(name) {
  ๐Ÿ™…โ€โ™€๏ธ let name="Micheal";
  alert(name+"๋‹˜ ๋กœ๊ทธ์ธ ์„ฑ๊ณต!");
}
  ๐Ÿ™†โ€โ™€๏ธ alertSigninSuccess("Micheal");

ํ•จ์ˆ˜ ์•ˆ์—์„œ ๋˜ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

MDN docs. function

ย ย ย ย parameter & argument

ย ย ย ํ•จ์ˆ˜๋Š” ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋Š”๋ฐ, ์ž…๋ ฅ์—๋Š” parameter(๋งค๊ฐœ'๋ณ€์ˆ˜')์™€ argument(์ธ์ž)๊ฐ€ ์žˆ๋‹ค.
ย ย ย ์•„๋ž˜ ์ฝ”๋“œ์—์„œ left์™€ right๊ฐ€ parameter(๋งค๊ฐœ๋ณ€์ˆ˜)์ด๊ณ , 2, 3, 3, 4๊ฐ€ argument(์ธ์ž)์ด๋‹ค.
ย ย ย ์ฆ‰, ๋งค๊ฐœ๋ณ€์ˆ˜ ์ž๋ฆฌ์— ์ธ์ž๋ฅผ ์ €์žฅํ•œ๋‹ค.
ย ย ย ์ธ์ž๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
ย ย ย ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ธ์ž๋ฅผ ์ „๋‹ฌ๋ฐ›์•„์„œ ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์œผ๋กœ ํ•จ์ˆ˜ ์•ˆ์ชฝ์—์„œ ์‚ฌ์šฉ๋œ๋‹ค.
ย ย ย ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๊ฐ’์„ ๋ฐ›์œผ๋ฉด ๊ทธ ๊ฐ’์ด ๋ฐ”๋กœ ํ•จ์ˆ˜๋กœ ์ „๋‹ฌ๋œ๋‹ค.

function sum(left, right){
  document.write(left+right+'<br>');
}
sum(2,3); // 5
sum(3,4); // 7

ย ย ย ย return

ย ย ย ํ•จ์ˆ˜์˜ ์ถœ๋ ฅ
ย ย ย '1 + 2 = 3'์—์„œ '1 + 2'๊ฐ€ 3์˜ ํ‘œํ˜„์‹์ด๋“ฏ, 1===1์€ ture์—์„œ 1===1์€ ture์˜ ํ‘œํ˜„์‹์ด๋‹ค.
ย ย ย return์„ ์ƒ๋žตํ•˜๋ฉด ํ•จ์ˆ˜๋Š” undefined๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
ย ย ย ๊ทธ๋Ÿฌ๋ฏ€๋กœ return์€ ํ•จ์ˆ˜์˜ ํ‘œํ˜„์‹์ด๋‹ค.
ย ย ย ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ๋Š” ํ–ˆ๋Š”๋ฐ, ๊ทธ๊ฒŒ ๋ญ”์ง€๋ฅผ ์•Œ ์ˆ˜๊ฐ€ ์—†์œผ๋‹ˆ return์—์„œ ๋ณ€์ˆ˜๋ช…์„ ์ง€์ •ํ•˜๊ธฐ๋„ ํ•œ๋‹ค.
ย ย ย ๊ทธ๋Ÿฌ๋ฏ€๋กœ ํ•จ์ˆ˜๋ฅผ ์“ธ ๋•Œ ํ•จ์ˆ˜๋ช…, ๋งค๊ฐœ๋ณ€์ˆ˜, ์ธ์ž, return ๋“ฑ์— ์ด๋ฆ„์„ ์ง€์ •ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.

function sum(left, right){
  return left+right;
}
// ํ•จ์ˆ˜์— ์˜ํ•ด ๋„์ถœ๋œ ๊ฒฐ๊ณผ๋ฅผ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ๊ฑด์ง€๋Š” ์•„๋ž˜์— ๊ธฐ์žฌ
document.write(sum(2,3)+'<br>');
document.write('<div style="color:red">'+sum(2,<3)+'</div>');
document.write('<div style="font-size:3rem;">'+sum(2,3)+'</div>');

โœ“ refactoring

<body>
  <input
    type="button"
    value="night"
    onclick="
     var target = document.querySelector('body');
       if (this.value === 'night')
        { target.style.backgroundColor = 'black';
          target.style.color = 'white';
          this.value = 'day';
        } else {
          target.style.backgroundColor = 'white';
          target.style.color = 'black';
          this.value = 'night';
        }
        ">
</body>

โ†“
1) event๋ฅผ head ์˜์—ญ์— ํ•จ์ˆ˜๋กœ ๊ธฐ์žฌ
2) body์—๋Š” head์—์„œ ์„ ์–ธํ•œ ํ•จ์ˆ˜๋ช…๋งŒ ๊ธฐ์žฌ
3) ์ „์—ญ ๊ฐœ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด 'this' ๋ถ€๋ถ„์„ ์ˆ˜์ •

<head>
  function nightDayHandler(modeChange){
  	var target = document.querySelector('body');
     if (modeChange.value === 'night')
      { target.style.backgroundColor = 'black';
        target.style.color = 'white';
        modeChange.value = 'day';
      } else {
        target.style.backgroundColor = 'white';
        target.style.color = 'black';
        modeChange.value = 'night';
      }
  }
</head>
<body>
  <input
    type="button"
    value="night"
    onclick="nightDayHandler(this)"
  >
</body>

10. object

ํ•จ์ˆ˜๋ผ๋Š” ๊ธฐ๋ฐ˜ ์œ„์— ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•œ๋‹ค.
๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์—ฌ๋Ÿฌ ์ด์œ  ์ค‘ ๊ฐ์ฒด ์—ญ์‹œ ์ •๋ฆฌ์ •๋ˆ์˜ ์ˆ˜๋‹จ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.
๊ฐ์ฒด๋ž€ ๋งŽ์€ ํ•จ์ˆ˜์™€ ์ด๋“ค ์‚ฌ์ด์— ์„œ๋กœ ์—ฐ๊ด€๋œ ๋ณ€์ˆ˜๋ฅผ ๊ฐ™์€ ์ด๋ฆ„์œผ๋กœ ๊ทธ๋ฃนํ•‘ํ•ด์„œ ์ž˜ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ด๋‹ค.
๋ฐฐ์—ด์—๋Š” ์ˆœ์„œ๊ฐ€ ์žˆ์ง€๋งŒ object๋Š” ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
ใ„ด ์ฆ‰, ๊ฐ์ฒด๋Š” ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€Œ์–ด๋„ ์ƒ๊ด€์—†๋‹ค.
๊ฐ์ฒด๋Š” Key์™€ ๊ฐ’(Value)์˜ ์กฐํ•ฉ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ data์ด๋ฉฐ, index๋กœ ๊ฐ’์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฐ์—ด๊ณผ ๋‹ค๋ฅด๊ฒŒ key๋กœ ๊ฐ’์— ์ ‘๊ทผํ•œ๋‹ค.
๊ฐ์ฒด๋Š” ์ค‘๊ด„ํ˜ธ๋กœ ๊ฐ์‹ธ์ง„ key-value(property)์˜ ํ˜•ํƒœ๋ฅผ ๊ฐ–๋Š”๋‹ค.
property ์ด๋ฆ„์€ ์ค‘๋ณต๋˜๋ฉด ์•ˆ ๋œ๋‹ค.

๊ฐ์ฒด์ด๋ฆ„ = {
property์ด๋ฆ„1: property๊ฐ’,
property์ด๋ฆ„2: property๊ฐ’
};

๊ฐ์ฒด์— ์ด๋ฏธ key๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ๋‹ค์‹œ ํ•œ ๋ฒˆ ํ• ๋‹นํ•˜๋ฉด ๊ฐ’์ด ๊ต์ฒด(์ˆ˜์ •)๋œ๋‹ค.
์ด์ „์— ์—†๋˜ key๋กœ ์ ‘๊ทผํ•˜๋ฉด ์ƒˆ๋กœ์šด property๊ฐ€ ์ถ”๊ฐ€ ๋œ๋‹ค.

<script>
const members = {
  "vocalist" : "JK",
  "dancer" : "J-Hope"
};
document.write(members.vocalist);
document.write(members.dnacer);
// ์•„๋ž˜๋Š” ๊ฐ์ฒด์— ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋Š” code
members["team leader"] = "RM";
// ์œ„์ฒ˜๋Ÿผ key ๊ฐ’์— ๋„์–ด์“ฐ๊ธฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ์ ์–ด์•ผ ํ•จ. 'member.tea leader'๋ผ๊ณ  ํ•˜๋ฉด ์•ˆ ๋จ.
</script>

โ†“ ๋ชจ๋“  ๊ฐ์ฒด ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ค๋ ค๋ฉด

<script>
  for (const key in members) {
    document.write(key+' : '+members[key]+'<br>';
</script>

๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ๋Š” ํ•  ์ˆ˜ ์—†์—ˆ์ง€๋งŒ ๊ฐ์ฒด์˜ key์—๋Š” ํ•œ๊ธ€, ํŠน์ˆ˜๋ฌธ์ž, ๊ณต๋ฐฑ, ๋ณ€์ˆ˜ ๋“ฑ์ด ์“ฐ์ผ ์ˆ˜ ์žˆ๋‹ค.
ใ„ด ๋‹จ ๊ณต๋ฐฑ, ๋ณ€์ˆ˜, ์ˆซ์ž๋กœ ๋˜์–ด ์žˆ๋Š” key์— ์ ‘๊ทผํ•  ๋•Œ๋Š” dot ๋ง๊ณ  ๋Œ€๊ด„ํ˜ธ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.
ย ย ย ย ย ์ฆ‰ property์— ์ ‘๊ทผํ•  ๋•Œ ๊ฐ์ฒด์ด๋ฆ„.property์ด๋ฆ„ ๋˜๋Š” ๊ฐ์ฒด์ด๋ฆ„["property์ด๋ฆ„"]
๊ฐ์ฒด๋Š” ๋ฌธ์ž, ์ˆซ์ž, ๋ฐฐ์—ด, ๊ฐ์ฒด ๋“ฑ ์–ด๋– ํ•œ data๋„ ๋‹ด์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹ฌ์ง€์–ด ํ•จ์ˆ˜๋„ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.

<script>
const members = {
  "vocalist" : "JK",
  "dancer" : "J-Hope"
};
members["team leader"] = "RM";
</script>

โ†“
1) 'members'๋ผ๋Š” ๊ฐ์ฒด์— 'showAll'์ด๋ผ๋Š” ํ•จ์ˆ˜ ์ถ”๊ฐ€
2) 'members'๋ผ๋Š” ๋ณ€์ˆ˜ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ž์‹ ์„ ๋œปํ•˜๋Š” 'this'๋กœ ์ˆ˜์ •

<script>
  members.showAll = function(){
  for(const key in this) {
    document.write(key+' : 'this[key]+'<br>');
  }
}
members.showAll();
// ๊ฐ™์€ ๊ฒฐ๊ณผ ๋„์ถœ
</script>

console.log()๋„ ํ˜•ํƒœ๋ฅผ ๋ณด๋ฉด ๊ฐ์ฒด์ด๋‹ค.
JavaScript ์–ด๋””์—๋‚˜ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ global ๊ฐ์ฒด์ด๋‹ค.
console ๋‹ค์Œ์— dot(.)์œผ๋กœ property์— ์ ‘๊ทผํ–ˆ๊ณ , log๋ผ๋Š” key์˜ ๊ฐ’์€ ํ•จ์ˆ˜์ด๋‹ค.
log๋Š” console ์ด๋ผ๋Š” ๊ฐ์ฒด์˜ method์ธ ๊ฒƒ์ด๋‹ค.

โœ“ interface

๋‘ system ๊ฐ„์˜ ์ƒํ˜ธ ์ž‘์šฉ ์žฅ์น˜

  • UI : User Interface, ์‚ฌ์šฉ์ž์™€ computer๊ฐ€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ์žฅ์น˜ ex. button
  • API : Application (์‘์šฉ) Program Interface, ์‘์šฉ program๊ณผ computer/์šด์˜ ์ฒด์ œ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๋Š” ์žฅ์น˜ ex. alert
    โ‡’ ๋‚ด๊ฐ€ JS๋ฅผ ๊ฐ€์ง€๊ณ  API๋ฅผ programmingํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ UI๋ฅผ ๊ฒฝํ—˜


Endnote

MDN docs

๐Ÿ™‡ the source of this content

MDN docs
์ƒํ™œ์ฝ”๋”ฉ
WeCode

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

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