# [๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] - JavaScript ๊ธฐ๋ณธ ๋ฌธ๋ฒ•
Study Repository

[๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] - JavaScript ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

by rlaehddnd0422

[๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ]๋Š” ์•„๋ž˜ ํŠœํ† ๋ฆฌ์–ผ ๊ณผ์ •์„ ๋ฐ”ํƒ•์œผ๋กœ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

๋ชจ๋˜ JavaScript ํŠœํ† ๋ฆฌ์–ผ

 

ko.javascript.info

 

๋ชจ๋˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ Deep Dive ๊ณผ์ •์œผ๋กœ ๊ฐ€๊ธฐ ์•ž์„œ ๋ฌธ๋ฒ•์œผ๋กœ์„œ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ถ€ํ„ฐ, ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋™์ž‘ํ•˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊นŒ์ง€ ํ•œ ๋ฒˆ ์ญ‰ ๋‹ค๋ค„๋ด…์‹œ๋‹ค.. ๋ฌธ๋ฒ•์ ์ธ ๋‚ด์šฉ๋“ค์€ ์–ธ์–ด๋งˆ๋‹ค ๋น„์Šทํ•œ ๋ถ€๋ถ„๋“ค์ด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด์— ์•Œ๋˜ ํŒŒํŠธ๋“ค์€ ์š”์•ฝํ•˜๊ฑฐ๋‚˜ ์ƒ๋žตํ–ˆ๋‹ค๋Š” ์  ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.


1. Html์—์„œ js ์‚ฌ์šฉํ•˜๊ธฐ

script ํƒœ๊ทธ

<script> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด html ๋ฌธ์„œ์—์„œ javascript ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

<!DOCTYPE HTML>
<html>
<body>
  <p>์Šคํฌ๋ฆฝํŠธ ์ „</p>
  <script>
    alert( 'Hello, world!' );
  </script>
  <p>์Šคํฌ๋ฆฝํŠธ ํ›„</p>
</body>
</html>

<script> ํƒœ๊ทธ์—๋Š” ๋ช‡ ๊ฐ€์ง€์˜ attribute๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ attribute๋ฅผ ์•Œ์•„๋ด…์‹œ๋‹ค.

 


type ์†์„ฑ 

<script type="text/javascript"><!--
    ...
//--></script>

 

HTML4 ์—์„œ๋Š” <script>์— type์„ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์˜€์Šต๋‹ˆ๋‹ค๋งŒ, ํ˜„์žฌ ํ‘œ์ค€์—์„œ๋Š” ํƒ€์ž…๋ช…์‹œ๊ฐ€ ํ•„์ˆ˜๊ฐ€ ์•„๋‹ˆ๊ณ , ์†์„ฑ์˜ ์˜๋ฏธ ๋˜ํ•œ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค. ์š”์ฆ˜์€ ์‚ฌ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ ์˜ค๋ž˜๋œ ์ฝ”๋“œ์—์„œ๋Š” type ์†์„ฑ๋“ค์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


src ์†์„ฑ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์˜ ์–‘์ด ๋งŽ์€ ๊ฒฝ์šฐ์—๋Š” ํŒŒ์ผ๋กœ ์†Œ๋ถ„ํ•ด์„œ ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐ”๋กœ src ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ๋ง์ด์ฃ .

<script src="/path/to/script.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>

 

์ด์™€ ๊ฐ™์ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ html์— ์ง์ ‘ ๋ณด์—ฌ์ฃผ์ง€ ์•Š๊ณ  ๋ณ„๋„์˜ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค๋ฉด ๊ฐ€๋…์„ฑ์„ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณ„๋„์˜ ํŒŒ์ผ์— ์ž‘์„ฑํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋‹ค์šด๋ฐ›์•„ "์บ์‹œ"์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์ƒ์˜ ์ด์ ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ์งง๊ณ  ๋‹จ์ˆœํ•˜์ง€ ์•Š๋‹ค๋ฉด ๋ณ„๋„์˜ ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹๊ฒ ๋„ค์š”.

 

  • src ์†์„ฑ์ด ์žˆ์œผ๋ฉด ํƒœ๊ทธ ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๋Š” ๋ฌด์‹œ๋œ๋‹ค๋Š” ์ ์— ์ฃผ์˜ํ•ฉ์‹œ๋‹ค.
    • <script src="file.js"> alert(1); // src ์†์„ฑ์ด ์‚ฌ์šฉ๋˜์—ˆ์œผ๋ฏ€๋กœ ์ด ์ฝ”๋“œ๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. </script>

2. ์ฝ”๋“œ ๊ตฌ์กฐ 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ์ค„๋ฐ”๊ฟˆ์ด ์žˆ๋‹ค๋ฉด ์„ธ๋ฏธ์ฝœ๋ก ์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ƒ๋žต์ด ๊ถŒ์žฅ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. 

alert('Hello');
alert('World');

์œ„ ์ฝ”๋“œ์˜ ์„ธ๋ฏธ์ฝœ๋ก ์€ ์ œ๊ฑฐํ•ด๋„ ์—๋Ÿฌ์—†์ด ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

alert('Hello')
alert('World')

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ค„๋ฐ”๊ฟˆ์ด ์žˆ์œผ๋ฉด '์•”์‹œ์ ' ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ํ•ด์„ํ•˜๊ณ , ์ด์™€ ๊ฐ™์€ ๋ฐฉ์‹์„ ์„ธ๋ฏธ์ฝœ๋ก  ์ž๋™์‚ฝ์ž…์ด๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ, ์ค„๋ฐ”๊ฟˆ์€ '์„ธ๋ฏธ์ฝœ๋ก '์„ ์˜๋ฏธํ•˜์ง€๋งŒ ๋งค๋ฒˆ ๊ทธ๋ ‡์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค๋ฉด ์ด๋ ‡๊ฒŒ์š”.

alert(3 +
1
+ 2);

 

์–ด๋–ค ์ค„์ด +๋กœ ๋๋‚˜๋ฉด ๊ทธ ์ค„์€ ๋ถˆ์™„์ „ํ•œ ํ‘œํ˜„์‹์ด๋ฏ€๋กœ, ์„ธ๋ฏธ์ฝœ๋ก ์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์œ„์™€ ๊ฐ™์ด ์ค„๋ฐ”๊ฟˆ๋ฌธ์ž๋ฅผ ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๋Œ€์ฒดํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, ์„ธ๋ฏธ์ฝœ๋ก ์ด ํ•„์š”ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์ด๋ฅผ ์ถ”์ •ํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ๋„ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ง์ธ ์ฆ‰์Šจ ์„ธ๋ฏธ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ๋กœ ํ•˜๋‚˜ ๋” ์‚ดํŽด๋ด…์‹œ๋‹ค.

alert("์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.")
[1, 2].forEach(alert)

 

alert() ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ดํ›„ ์„ธ๋ฏธ์ฝœ๋ก ์ด ์ƒ๋žต๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค๋งŒ. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๋Œ€๊ด„ํ˜ธ ์•ž์—๋Š” ์„ธ๋ฏธ์ฝœ๋ก ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ ํ˜ธ์ถœ์ด ์•„๋ž˜์ฒ˜๋Ÿผ ์ด๋ฃจ์–ด์ ธ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

alert("์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.")[1, 2].forEach(alert)

 

์ค„ ๋ฐ”๊ฟˆ์œผ๋กœ ๋ฌธ์„ ๋‚˜๋ˆด๋”๋ผ๋„, ๋ฌธ ์‚ฌ์ด์—” ์„ธ๋ฏธ์ฝœ๋ก ์„ ๋„ฃ๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ๋„ ์ด๋ฅผ ๊ทœ์น™์œผ๋กœ ์ •ํ•ด ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋‹ค์‹œ ํ•œ๋ฒˆ ์ •๋ฆฌํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ์„ธ๋ฏธ์ฝœ๋ก ์€ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์„ธ๋ฏธ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ์•ˆ์ „ํ•˜๋ฏ€๋กœ ์ด๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ๋”ฐ๋ฅด๋„๋ก ํ•ฉ์‹œ๋‹ค. 

3. ์—„๊ฒฉ ๋ชจ๋“œ ("use strict";)

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์˜ค๋žซ๋™์•ˆ ํ˜ธํ™˜์„ฑ ์ด์Šˆ ์—†์ด ๋ฐœ์ „ํ•ด์™”์œผ๋ฉฐ ๊ธฐ์กด์˜ ๊ธฐ๋Šฅ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.  

ํ•˜์ง€๋งŒ ES5์—์„œ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜๊ณ  ๊ธฐ์กด ๊ธฐ๋Šฅ ์ค‘ ์ผ๋ถ€๊ฐ€ ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”๋ฐ, ์ด ๋•Œ๋ฌธ์— ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ ๋Œ€๋ถ€๋ถ„์€ ES5์˜ ๊ธฐ๋ณธ ๋ชจ๋“œ์—์„  ํ™œ์„ฑํ™”๋˜์ง€ ์•Š๋„๋ก ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  use strict๋ผ๋Š” ํŠน๋ณ„ํ•œ ์ง€์‹œ์ž๋ฅผ ์‚ฌ์šฉํ•ด ์—„๊ฒฉ ๋ชจ๋“œ(strict mode)๋ฅผ ํ™œ์„ฑํ™” ํ–ˆ์„ ๋•Œ๋งŒ ์ด ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ํ™œ์„ฑํ™”๋˜๊ฒŒ ํ•ด๋†“์•˜์Šต๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ๋ฒ•์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ง€ "use strict", 'use strict'๋ฅผ ์„ ์–ธํ•ด์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ๋ฐ˜๋“œ์‹œ ์ตœ์ƒ๋‹จ์— ์œ„์น˜์‹œ์ผœ์•ผ ํ•œ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค. 

๋˜ํ•œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ์ด์ „ ๋ฐฉ์‹์œผ๋กœ ๋˜๋Œ๋ฆฌ๋Š” "no use strict"๊ฐ™์€ ์ง€์‹œ์ž๋Š” ์กด์žฌํ•˜์ง€ ์•Š์•„, ์ผ๋‹จ ์—„๊ฒฉ ๋ชจ๋“œ๊ฐ€ ์ ์šฉ๋˜๋ฉด ๋Œ์ดํ‚ฌ ๋ฐฉ๋ฒ•์€ ์—†๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.

alert("some code");
// ํ•˜๋‹จ์— ์œ„์น˜ํ•œ "use strict"๋Š” ์Šคํฌ๋ฆฝํŠธ ์ƒ๋‹จ์— ์œ„์น˜ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค.

"use strict";

// ์—„๊ฒฉ ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ๋“ค์„ ํ•˜๋‚˜์”ฉ ํ•™์Šตํ•˜๋ฉด์„œ ์ด ๊ธฐ๋Šฅ๋“ค์ด ์—„๊ฒฉ ๋ชจ๋“œ์™€ ๋น„ ์—„๊ฒฉ ๋ชจ๋“œ์—์„œ ์–ด๋–ค ์ฐจ์ด์ ์„ ๋ณด์ด๋Š”์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํฌ์†Œ์‹์„ ์•Œ๋ ค๋“œ๋ฆฌ์ž๋ฉด ๋‘ ๋ชจ๋“œ์—์„œ ์ฐจ์ด๋ฅผ ๋ณด์ด๋Š” ๊ธฐ๋Šฅ์ด ๋งŽ์ง€ ์•Š๋‹ค๋Š” ์ ๊ณผ ์—„๊ฒฉ ๋ชจ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ๋ฐœ์ž์˜ ์‚ถ์˜ ์งˆ์ด ์กฐ๊ธˆ ๋” ๋†’์•„์ง„๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.


4. ๋ณ€์ˆ˜์™€ ์ƒ์ˆ˜

  • let – ๋ชจ๋˜ํ•œ ๋ณ€์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.
  • var – ์˜ค๋ž˜๋œ ๋ณ€์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค. ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. let๊ณผ์˜ ๋ฏธ๋ฌ˜ํ•œ ์ฐจ์ด์ ์€ ์˜ค๋ž˜๋œ var ์ฑ•ํ„ฐ์—์„œ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  • const – let๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์ ์—์„œ, const๋Š” ์ƒ์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.

 

์˜ˆ์ „ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” let ์—†์ด๋„ ๊ฐ’์„ ํ• ๋‹นํ•ด ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, use strict๋ฅผ ์“ฐ์ง€ ์•Š์œผ๋ฉด  ๊ณผ๊ฑฐ ์Šคํฌ๋ฆฝํŠธ์™€์˜ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

num = 5; // ๋ณ€์ˆ˜ 'num'์ด ์ •์˜๋˜์–ด์žˆ์ง€ ์•Š๋”๋ผ๋„, ๋‹จ์ˆœ ํ• ๋‹น๋งŒ์œผ๋กœ ๋ณ€์ˆ˜๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
alert(num); // 5
"use strict";
num = 5; // error: num is not defined

 

๋ณ€์ˆ˜ ๋ช…๋ช… ๊ทœ์น™

  1. ๋ณ€์ˆ˜๋ช…์—๋Š” ์˜ค์ง ๋ฌธ์ž์™€ ์ˆซ์ž, ๊ทธ๋ฆฌ๊ณ  ๊ธฐํ˜ธ $์™€ _๋งŒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ฒซ ๊ธ€์ž๋Š” ์ˆซ์ž๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
  3. ์˜ˆ์•ฝ์–ด๋Š” ๋ณ€์ˆ˜๋ช…์œผ๋กœ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. (ex/ let, return,class, function ๋“ฑ)
  4. ๋ณ€์ˆ˜๋ช…์€ ๊ฐ„๊ฒฐํ•˜๊ณ , ๋ช…ํ™•ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๊ฐ€ ๋‹ด๊ณ ์žˆ๋Š” ๊ฒƒ์ด ๋ฌด์—‡์ธ์ง€ ์ž˜ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•˜์ฃ . ๋ฌผ๋ก  ๋„ค์ด๋ฐ์€ ๋ˆ„๊ตฌ์—๊ฒŒ๋‚˜ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

5. ์ž๋ฃŒํ˜•

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” 8๊ฐ€์ง€ ์ž๋ฃŒํ˜•์ด ์žˆ์Šต๋‹ˆ๋‹ค. 8๊ฐœ์˜ ์ž๋ฃŒํ˜•์„ ๋ชจ๋‘ ๊ฐœ๊ด„์ ์œผ๋กœ ๋‹ค๋ค„๋ด…์‹œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์šฐ์„  java๋‚˜ cpp์ฒ˜๋Ÿผ primitive type์˜ ์ž๋ฃŒํ˜•์ด ๋”ฐ๋กœ ์กด์žฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋ณ€์ˆ˜๋Š” ์–ด๋–ค ์ˆœ๊ฐ„์—๋Š” ๋ฌธ์ž์—ด์ด ๋  ์ˆ˜๋„, ์ˆซ์žํ˜•์ด ๋  ์ˆ˜๋„ ์žˆ๋Š” ๋™์  ํƒ€์ž…์„ ๊ฐ€์ง€๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ๋ณ€์ˆ˜๊ฐ’์˜ ํƒ€์ž…์„ ์–ธ์ œ๋“ ์ง€ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด๋ฅผ '๋™์  ํƒ€์ž… ์–ธ์–ด'๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.


์ˆซ์žํ˜•

์ˆซ์žํ˜•์€ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” ์ •์ˆ˜์™€ ๋ถ€๋™์†Œ์ˆซ์ ์ด ํฌํ•จ๋˜๊ณ  ์ถ”๊ฐ€๋กœ ์ˆซ์žํ˜•์—” ์ผ๋ฐ˜์ ์ธ ์ˆซ์ž ์™ธ์— Infinity, -Infinity, NaN๊ฐ™์€ 'ํŠน์ˆ˜ ์ˆซ์ž ๊ฐ’(special numeric value)'์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

  • Infinity : ๋ฌดํ•œ๋Œ€๋ฅผ ๋‚˜ํƒ€๋ƒ„
  • NaN : ์—ฐ์‚ฐ ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ๋‚˜ํƒ€๋‚ด์ฃผ๋Š” ๊ฐ’
alert( "์ˆซ์ž๊ฐ€ ์•„๋‹˜" / 2 ); // NaN, ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋‚˜๋ˆ„๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
alert( "์ˆซ์ž๊ฐ€ ์•„๋‹˜" / 2 + 5 ); // NaN

BigInt

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” 2^53-1 ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ -(2^53-1)๋ณด๋‹ค ์ž‘์€ ์ •์ˆ˜๋Š” ๋ฆฌํ„ฐ๋Ÿด๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ๋ฒ”์œ„ ๋ฐ–์˜ ์ˆซ์ž๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋Š” BigIntํ˜•์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. BigIntํ˜•์€ ํ‘œ์ค€์œผ๋กœ ์ฑ„ํƒ๋œ ์ง€ ์–ผ๋งˆ ์•ˆ ๋œ ์ž๋ฃŒํ˜•์œผ๋กœ, ๊ธธ์ด์— ์ƒ๊ด€์—†์ด ์ •์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. BigIntํ˜• ๊ฐ’์€ ์ •์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด ๋์— n์„ ๋ถ™์ด๋ฉด ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ๋์— 'n'์ด ๋ถ™์œผ๋ฉด BigIntํ˜• ์ž๋ฃŒ์ž…๋‹ˆ๋‹ค.
const bigInt = 1234567890123456789012345678901234567890n;

๋ฌธ์ž์—ด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋Š” ๋ฌธ์ž์—ด์„ ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ ๋”ฐ์˜ดํ‘œ๋Š” ํฐ ๋”ฐ์˜ดํ‘œ("), ์ž‘์€ ๋”ฐ์˜ดํ‘œ('), ๋ฐฑํ‹ฑ(`)์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํฐ ๋”ฐ์˜ดํ‘œ์™€ ์ž‘์€ ๋”ฐ์˜ดํ‘œ๋Š” ์ทจํ–ฅ์ฐจ์ด๊ณ  ๋ฐฑํ‹ฑ์€ ๋ณ€์ˆ˜๋‚˜ ํ‘œํ˜„์‹์„ ๊ฐ์‹ผ ํ›„ ${…}์•ˆ์— ๋„ฃ์–ด์ฃผ๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์›ํ•˜๋Š” ๋ณ€์ˆ˜๋‚˜ ํ‘œํ˜„์‹์„ ๋ฌธ์ž์—ด ์ค‘๊ฐ„์— ์†์‰ฝ๊ฒŒ ๋„ฃ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let name = "John";

// ๋ณ€์ˆ˜๋ฅผ ๋ฌธ์ž์—ด ์ค‘๊ฐ„์— ์‚ฝ์ž…
alert( `Hello, ${name}!` ); // Hello, John!
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” ๊ธ€์žํ˜•(char)์ด ๋”ฐ๋กœ ์—†์Šต๋‹ˆ๋‹ค. ๊ณ ๋กœ ํ•œ ๊ธ€์ž๋„ ๋ฌธ์ž์—ด์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ฉ์‹œ๋‹ค. 

๋ถˆ๋ฆฐํ˜•

๋ถˆ๋ฆฐํ˜•(๋…ผ๋ฆฌ ํƒ€์ž…)์€ true์™€ false ๋‘ ๊ฐ€์ง€ ๊ฐ’๋ฐ–์— ์—†๋Š” ์ž๋ฃŒํ˜•์ž…๋‹ˆ๋‹ค.


null

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ null์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ด์™ธ ์–ธ์–ด์˜ null๊ณผ ์„ฑ๊ฒฉ์ด ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด์—์„  null์„ '์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ’๋‚˜ '๋„ ํฌ์ธํ„ฐ(null pointer)'๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„  null์„ ‘์กด์žฌํ•˜์ง€ ์•Š๋Š”(nothing)’ ๊ฐ’, ‘๋น„์–ด ์žˆ๋Š”(empty)’ ๊ฐ’, ‘์•Œ ์ˆ˜ ์—†๋Š”(unknown)’ ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

let age = null;


let age = null;์€ ๋‚˜์ด(age)๋ฅผ ์•Œ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๊ทธ ๊ฐ’์ด ๋น„์–ด์žˆ์Œ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.


undefined

undefined๋Š” '๊ฐ’์ด ํ• ๋‹น๋˜์ง€ ์•Š์€ ์ƒํƒœ’๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

let age;

alert(age); // 'undefined'๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.


๋ณ€์ˆ˜๋Š” ์„ ์–ธํ–ˆ์ง€๋งŒ, ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜์— undefined๊ฐ€ ์ž๋™์œผ๋กœ ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ undefined๋ฅผ ์ง์ ‘ ํ• ๋‹นํ•˜๋Š” ๊ฑธ ๊ถŒ์žฅํ•˜์ง„ ์•Š์Šต๋‹ˆ๋‹ค. ๋ณ€์ˆ˜๊ฐ€ ‘๋น„์–ด์žˆ๊ฑฐ๋‚˜’ ‘์•Œ ์ˆ˜ ์—†๋Š”’ ์ƒํƒœ๋ผ๋Š” ๊ฑธ ๋‚˜ํƒ€๋‚ด๋ ค๋ฉด null์„ ์‚ฌ์šฉํ•˜๊ณ , undefined๋Š” ๊ฐ’์ด ํ• ๋‹น๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜์˜ ์ดˆ๊ธฐ๊ฐ’์„ ์œ„ํ•ด ์˜ˆ์•ฝ์–ด๋กœ ๋‚จ๊ฒจ๋‘ก์‹œ๋‹ค.


๊ฐ์ฒด, ์‹ฌ๋ณผ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๊ฐ์ฒดํ˜•์€ ํŠน์ˆ˜ํ•œ ์ž๋ฃŒํ˜•์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒดํ˜•์„ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜•์€ ๋ฌธ์ž์—ด์ด๋“  ์ˆซ์ž๋“  ํ•œ ๊ฐ€์ง€๋งŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์›์‹œ(primitive) ์ž๋ฃŒํ˜•์ด๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค๋งŒ ๊ฐ์ฒด๋Š” ๋ฐ์ดํ„ฐ ์ปฌ๋ ‰์…˜์ด๋‚˜ ๋ณต์žกํ•œ ๊ฐœ์ฒด๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์‹ฌ๋ณผํ˜•์€ ๊ฐ์ฒด์˜ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ง€๊ธˆ์€ ์ด์ •๋„๊นŒ์ง€๋งŒ ๊ธฐ์–ตํ•˜๊ณ , ๋’ค์— ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


typeof ์—ฐ์‚ฐ์ž

typeof ์—ฐ์‚ฐ์ž๋Š” ์ธ์ˆ˜์˜ ์ž๋ฃŒํ˜•์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๋ฐฉ๋ฒ•์€ ๋‘ ๊ฐ€์ง€ ์ž…๋‹ˆ๋‹ค.

  1. ์—ฐ์‚ฐ์ž : typeof x
  2. ํ•จ์ˆ˜ : typeof(x)
typeof undefined // "undefined"

typeof 0 // "number"

typeof 10n // "bigint"

typeof true // "boolean"

typeof "foo" // "string"

typeof Symbol("id") // "symbol"

typeof Math // "object"  (1)

typeof null // "object"  (2)

typeof alert // "function"  (3)

 

๋งˆ์ง€๋ง‰ ์„ธ ์ค„์€ ์•ฝ๊ฐ„์˜ ์„ค๋ช…์ด ํ•„์š”ํ•ด ๋ณด์ด๋„ค์š”.

  • Math๋Š” ์ˆ˜ํ•™ ์—ฐ์‚ฐ์„ ์ œ๊ณตํ•˜๋Š” ๋‚ด์žฅ ๊ฐ์ฒด์ด๋ฏ€๋กœ "object"๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. ๋‚ด์žฅ ๊ฐ์ฒด๋Š” ๊ฐ์ฒดํ˜•์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ๋ ค์ฃผ๊ธฐ ์œ„ํ•ด ์ด๋Ÿฐ ์˜ˆ์‹œ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.
  • typeof null์˜ ๊ฒฐ๊ณผ๋Š” "object"์ž…๋‹ˆ๋‹ค. null์€ ๋ณ„๋„์˜ ๊ณ ์œ ํ•œ ์ž๋ฃŒํ˜•์„ ๊ฐ€์ง€๋Š” ํŠน์ˆ˜ ๊ฐ’์œผ๋กœ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ์ง€๋งŒ, ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฐ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ๋‚จ๊ฒจ๋‘” ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค. ์–ธ์–ด ์ž์ฒด์˜ ์˜ค๋ฅ˜์ด๊ณ , null์ด ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์— ์ฃผ์˜ํ•ฉ์‹œ๋‹ค.
  • typeof๋Š” ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ํ•จ์ˆ˜๋ฉด "function"์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ typeof alert๋Š” "function"์„ ์ถœ๋ ฅํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ 'ํ•จ์ˆ˜’ํ˜•์€ ๋”ฐ๋กœ ์—†์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋Š” ๊ฐ์ฒดํ˜•์— ์†ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๋™์ž‘ ๋ฐฉ์‹์ด ํ˜•์‹์ ์œผ๋ก  ์ž˜๋ชป๋˜๊ธด ํ–ˆ์ง€๋งŒ, ์•„์ฃผ ์˜ค๋ž˜์ „์— ๋งŒ๋“ค์–ด์ง„ ๊ทœ์น™์ด์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•˜์œ„ ํ˜ธํ™˜์„ฑ ์œ ์ง€๋ฅผ ์œ„ํ•ด ๋‚จ๊ฒจ์ง„ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ํ•œํŽธ, ์‹ค๋ฌด์—์„  ์ด๋Ÿฐ ํŠน์ง•์ด ๋งค์šฐ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค.

6. alert, prompt, confirm ํ•จ์ˆ˜

๋ธŒ๋ผ์šฐ์ €๋Š” ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์„ธ ๊ฐ€์ง€ ํ•จ์ˆ˜๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • alert : ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
alert("Hello");
  • prompt : ์‚ฌ์šฉ์ž์—๊ฒŒ ํ…์ŠคํŠธ๋ฅผ ์ž…๋ ฅํ•˜๋ผ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋„์›Œ์คŒ๊ณผ ๋™์‹œ์—, ์ž…๋ ฅ ํ•„๋“œ๋ฅผ ํ•จ๊ป˜ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ํ™•์ธ์„ ๋ˆ„๋ฅด๋ฉด prompt ํ•จ์ˆ˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฌธ์ž์—ด์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์ทจ์†Œ ๋˜๋Š” Esc๋ฅผ ๋ˆ„๋ฅด๋ฉด null์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
result = prompt(title, [default]); // [default]์— ๊ฐ’์„ ๋„ฃ์œผ๋ฉด ๋ฐ•์Šค์•ˆ์— ๊ฐ’์ด default ๊ฐ’์œผ๋กœ ์ฑ„์›Œ์ง
  • confirm : ์‚ฌ์šฉ์ž๊ฐ€ ํ™•์ธ ๋˜๋Š” ์ทจ์†Œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅผ ๋•Œ๊นŒ์ง€ ๋ฉ”์‹œ์ง€๊ฐ€ ์ฐฝ์— ๋ณด์—ฌ์ง‘๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ํ™•์ธ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด true๋ฅผ, ์ทจ์†Œ ๋ฒ„ํŠผ์ด๋‚˜ Esc๋ฅผ ๋ˆ„๋ฅด๋ฉด false๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
result = confirm(question); // ์‚ฌ์šฉ์ž๊ฐ€ ํ™•์ธ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด true, ๊ทธ ์™ธ์˜ ๊ฒฝ์šฐ๋Š” false๋ฅผ ๋ฐ˜ํ™˜

7. ํ˜• ๋ณ€ํ™˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” "๋™์  ํƒ€์ž… ์–ธ์–ด"๋กœ ํ•จ์ˆ˜์™€ ์—ฐ์‚ฐ์ž์— ์ „๋‹ฌ๋˜๋Š” ๊ฐ’๋“ค๋„ ๋Œ€๋ถ€๋ถ„ ์ ์ ˆํ•œ ์ž๋ฃŒํ˜•์œผ๋กœ ์ž๋™๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ณผ์ •์„ "ํ˜• ๋ณ€ํ™˜"์ด๋ผ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

alert ํ•จ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์˜ ์ž๋ฃŒํ˜•๊ณผ ๊ด€๊ณ„์—†์ด ์ด๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์ด๋‚˜, ์ˆ˜ํ•™ ๊ด€๋ จ ์—ฐ์‚ฐ์ž๊ฐ€ ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ํ˜• ๋ณ€ํ™˜์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ.

 

์ด ์™ธ์—, ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์„ ์˜๋„๋ฅผ ๊ฐ–๊ณ  ์›ํ•˜๋Š” ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜(๋ช…์‹œ์  ๋ณ€ํ™˜)ํ•ด ์ฃผ๋Š” ๊ฒฝ์šฐ๋„ ํ˜• ๋ณ€ํ™˜์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋‹จ๋ฝ์—์„œ๋Š” ์›์‹œํ˜•์˜ ํ˜•๋ณ€ํ™˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


๋ฌธ์ž์—ดํ˜• ํ˜•๋ณ€ํ™˜

๋ฐฉ๊ธˆ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด alert ๋ฉ”์†Œ๋“œ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฌธ์žํ˜•์„ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— alert(value)์—์„œ value๋Š” ๋ฌธ์ž์—ดํ˜•์ด์–ด์•ผ ํ•˜๋ฉฐ, ๋งŒ์•ฝ ๋‹ค๋ฅธํ˜•์˜ ๊ฐ’์„ ์ „๋‹ฌ๋ฐ›์œผ๋ฉด ์ž๋™์œผ๋กœ ๋ฌธ์ž์—ดํ˜•์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด ์™ธ์—๋„ String() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ์ „๋‹ฌ๋ฐ›์€ ๊ฐ’์„ ๋ฌธ์ž์—ดํ˜•์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

let value = true;
alert( typeof value ); // boolean

value = String(value);
alert( typeof value ); // string
alert(value); // "true"

์ˆซ์žํ˜• ํ˜•๋ณ€ํ™˜

์ˆซ์žํ˜•์œผ๋กœ์˜ ํ˜•๋ณ€ํ™˜์€ ์—ฐ์‚ฐ์ด๋‚˜ ํ‘œํ˜„์‹์—์„œ ์ž๋™์œผ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์ˆซ์žํ˜•์ด ์•„๋‹Œ ๊ฐ’์— ๋‚˜๋ˆ„๊ธฐ๋ฅผ ์ ์šฉํ•œ ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ๋ง์ด์ฃ .

alert( "6" / "2" ); // 3, ๋ฌธ์ž์—ด์ด ์ˆซ์žํ˜•์œผ๋กœ ์ž๋™๋ณ€ํ™˜๋œ ํ›„ ์—ฐ์‚ฐ์ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

 

Number() ํ•จ์ˆ˜๋กœ ๊ฐ’์„ ์ˆซ์žํ˜•์œผ๋กœ ๋ช…์‹œํ•ด์„œ ๋ณ€ํ™˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋•Œ value์— ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋ฌธ์ž๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ์—๋Š” NaN์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

let age = Number("์ž„์˜์˜ ๋ฌธ์ž์—ด 123"); // NaN

 

๋ฌธ์ž์™ธ์—๋„

  • undefined๋ฅผ ์ˆซ์žํ˜•์œผ๋กœ ๋ณ€ํ™˜์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ NaN์ด ๋ฆฌํ„ด
  • null์„ ์ˆซ์žํ˜•์œผ๋กœ ๋ณ€ํ™˜์‹œ๋„ํ•˜๋Š” ๊ฒฝ์šฐ 0์„ ๋ฆฌํ„ด
  • true and false๋Š” 1(true), 0(false)์„ ๋ฆฌํ„ด 
  • string -> ์‹œ์ž‘๊ณผ ๋์˜ ๊ณต๋ฐฑ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ œ๊ฑฐ, ์ œ๊ฑฐ ํ›„ ๋ฌธ์ž์—ด์ด ์—†๋‹ค๋ฉด("") 0, ์žˆ๋‹ค๋ฉด ์ˆซ์ž๋ฅผ ์ฝ์–ด ์ˆซ์ž๋กœ ๋ฆฌํ„ด, ๋ณ€ํ™˜์— ์‹คํŒจํ•˜๋ฉด(๋ฌธ์ž๊ฐ€ ๋‚จ์•„์žˆ๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ™์ด) NaN์„ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

๋ถˆ๋ฆฐํ˜• ํ˜•๋ณ€ํ™˜

๋ถˆ๋ฆฐํ˜• ํ˜•๋ณ€ํ™˜์€ ๋น„๊ต์  ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  • ์ˆซ์ž 0, ๋นˆ ๋ฌธ์ž์—ด, null, undefined, NaN๊ณผ ๊ฐ™์ด "๋น„์–ด์žˆ๋‹ค๊ณ  ๋Š๊ปด์ง€๋Š” ๊ฐ’"๋“ค์€ false
  • ๊ทธ ์™ธ๋Š” ์ „๋ถ€ true๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฌธ์ž์—ด "0"์€ true์ผ๊นŒ์š”? false์ผ๊นŒ์š”?

์ˆซ์ž 0์ด์—ˆ๋‹ค๋ฉด false๊ฒ ์ง€๋งŒ ๋ฌธ์ž์—ด "0"์ธ ๊ฒฝ์šฐ๋Š” ๋ฌธ์ž์—ด์ด ๋น„์–ด์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— true๊ฐ€ ๋˜๊ฒ ์ฃ .

alert( Boolean("0") ); // true
alert( Boolean(" ") ); // ๊ณต๋ฐฑ์ด ์žˆ๋Š” ๋ฌธ์ž์—ด๋„ ๋น„์–ด์žˆ์ง€ ์•Š์€ ๋ฌธ์ž์—ด์ด๊ธฐ ๋•Œ๋ฌธ์— true๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

 

์•„๋ž˜ ํ‘œํ˜„์‹๋“ค์˜ ๊ฒฐ๊ณผ๋ฅผ ์˜ˆ์ธกํ•ด ๋ด…์‹œ๋‹ค.

"" + 1 + 0 // "10"
"" - 1 + 0 // -1
true + false // 1
6 / "3" // 2
"2" * "3" // 6
4 + 5 + "px" // "9px"
"$" + 4 + 5 // "$45"
"4" - 2 // 2
"4px" - 2 // NaN
7 / 0 // Infinity
"  -9  " + 5 // "  -9  5"
"  -9  " - 5 // -14
null + 1 // 1
undefined + 1 // NaN
" \t \n" - 2 // -2

11. ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž ||, &&, !

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋„ ||, &&, !์—ฐ์‚ฐ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ถˆ๋ฆฐํ˜•์— ๋Œ€ํ•ด ๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์ƒ๋žตํ•˜๊ณ , ๋ถˆ๋ฆฐํ˜•์ด ์•„๋‹Œ ์ž๋ฃŒํ˜•์— ๋Œ€ํ•ด์„œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ์•„๋ณผ๊ฒ๋‹ˆ๋‹ค.

 

์ฒซ ๋ฒˆ์งธ truthy๋ฅผ ์ฐพ๋Š” ์—ฐ์‚ฐ์ž '||'

OR "||" ์—ฐ์‚ฐ์ž๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ฒด์ด๋‹(chaining) ํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ truthy๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ”ผ์—ฐ์‚ฐ์ž์— truthy๊ฐ€ ํ•˜๋‚˜๋„ ์—†๋‹ค๋ฉด ๋งˆ์ง€๋ง‰ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” truthy๋Š” "์ฐธ ๊ฐ™์€ ๊ฐ’"์œผ๋กœ ์ˆซ์ž 0, ๋นˆ ๋ฌธ์ž์—ด(""), null, undefined, NaN์ด ์•„๋‹Œ ๊ฐ’๋“ค์„ ๋ถˆ๋ฆฐํ˜•์œผ๋กœ ๋ณ€ํ™˜ ์‹œ true๊ฐ€ ๋ฐ˜ํ™˜ ๋˜๋ฏ€๋กœ "truthy(์ฐธ ๊ฐ™์€)" ๊ฐ’์ด๋ผ ๋ถ€๋ฅด๊ณ ,
  • ์ˆซ์ž 0, ๋นˆ ๋ฌธ์ž์—ด(""), null, undefined, NaN์€ ๋ถˆ๋ฆฐํ˜•์œผ๋กœ ๋ณ€ํ™˜ ์‹œ ๋ชจ๋‘ false๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฉฐ ์ด๋Ÿฐ ๊ฐ’๋“ค์„ "falsy(๊ฑฐ์ง“ ๊ฐ™์€)" ๊ฐ’์ด๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. 
alert( 1 || 0 ); // 1 (1์€ truthy์ž„)

alert( null || 1 ); // 1 (1์€ truthy์ž„)
alert( null || 0 || 1 ); // 1 (1์€ truthy์ž„)

alert( undefined || null || 0 ); // 0 (๋ชจ๋‘ falsy์ด๋ฏ€๋กœ, ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ)

 

|| ์—ฐ์‚ฐ์ž๋Š” truthy๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•˜์ง€๋งŒ short cicuit evaluation(๋‹จ๋ฝ ํ‰๊ฐ€) ๊ธฐ๋Šฅ์—๋„ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํ‰๊ฐ€๋ฅผ ์ง„ํ–‰ํ•˜๋Š”๋ฐ, ํ‰๊ฐ€ ๋„์ค‘ truthy๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜๋ฉด ํ‰๊ฐ€๋ฅผ ๋ฉˆ์ถ”๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹จ๋ฝํ‰๊ฐ€๋ผ๊ณ  ํ•˜๋ฉฐ, ๋‹จ๋ฝ ํ‰๊ฐ€๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ ์—ฐ์‚ฐ์ž ์™ผ์ชฝ ์กฐ๊ฑด์ด falsy์ผ ๋•Œ๋งŒ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ณ ์ž ํ•  ๋•Œ ์ž์ฃผ ์“ฐ์ž…๋‹ˆ๋‹ค.

์กฐ๊ฑด || alert("printed");

 

์ฒซ ๋ฒˆ์งธ falsy๋ฅผ ์ฐพ๋Š” AND ์—ฐ์‚ฐ์ž ‘&&’

&& ๋˜ํ•œ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋‚˜์•„๊ฐ€๋ฉฐ ํ‰๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

// ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ truthy์ด๋ฉด,
// AND๋Š” ๋‘ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
alert( 1 && 0 ); // 0
alert( 1 && 5 ); // 5

// ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ falsy์ด๋ฉด,
// AND๋Š” ์ฒซ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋‘ ๋ฒˆ์งธ ํ”ผ์—ฐ์‚ฐ์ž๋Š” ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
alert( null && 5 ); // null
alert( 0 && "์•„๋ฌด๊ฑฐ๋‚˜ ์™€๋„ ์ƒ๊ด€์—†์Šต๋‹ˆ๋‹ค." ); // 0
  • ๊ฐ ํ”ผ์—ฐ์‚ฐ์ž๋Š” ๋ถˆ๋ฆฐํ˜•์œผ๋กœ ๋ณ€ํ™˜๋˜๋ฉฐ ๋ณ€ํ™˜๋œ ๊ฐ’์ด false์ด๋ฉด ํ‰๊ฐ€๋ฅผ ๋ฉˆ์ถ”๊ณ  ํ•ด๋‹น ํ”ผ์—ฐ์‚ฐ์ž์˜ ๋ณ€ํ™˜ ์ „ ์›๋ž˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ํ”ผ์—ฐ์‚ฐ์ž ๋ชจ๋‘๊ฐ€ ํ‰๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ(๋ชจ๋“  ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ true๋กœ ํ‰๊ฐ€๋˜๋Š” ๊ฒฝ์šฐ)์—” ๋งˆ์ง€๋ง‰ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

์ด์ œ "|| ์—ฐ์‚ฐ์ž๋Š” ์ฒซ ๋ฒˆ์งธ truthy๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด, && ์—ฐ์‚ฐ์ž๋Š” ์ฒซ ๋ฒˆ์งธ falsy๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค"๋ผ๋Š” ์ฐจ์ด๊ฐ€ ๋Š๊ปด์ง€๋„ค์š”.

 

!! ์—ฐ์‚ฐ์ž

Not์—ฐ์‚ฐ์ž !๋ฅผ ๋‘๊ฐœ ์—ฐ์† ์‚ฌ์šฉํ•˜๋ฉด ๋ถˆ๋ฆฐํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฒซ ๋ฒˆ์งธ NOT ์—ฐ์‚ฐ์ž๋Š” ํ”ผ์—ฐ์‚ฐ์ž๋กœ ๋ฐ›์€ ๊ฐ’์„ ๋ถˆ๋ฆฐํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•œ ํ›„ ์ด ๊ฐ’์˜ ์—ญ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ ,

๋‘ ๋ฒˆ์งธ NOT ์—ฐ์‚ฐ์ž๋Š” ์ฒซ ๋ฒˆ์งธ NOT ์—ฐ์‚ฐ์ž๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ๊ฐ’์˜ ์—ญ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ NOT์„ ์—ฐ๋‹ฌ์•„ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ๊ฐ’์„ ๋ถˆ๋ฆฐํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

alert( !!"non-empty string" ); // true
alert( !!null ); // false

 

์•„๋ž˜ ์ฝ”๋“œ๋“ค์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ์˜ˆ์ธกํ•ด๋ด…์‹œ๋‹ค.

alert( null || 2 || undefined ); // (1)

alert( alert(1) || 2 || alert(3) ); // (2)

alert( 1 && null && 2 ); // (3)

alert( alert(1) && alert(2) ); // (4)

alert( null || 2 && 3 || 4 ); // (5)


// (1) : ์ฒซ๋ฒˆ์งธ truthy๋ฅผ ์ฐพ์•„๋ณด๊ณ , ์—†์œผ๋ฉด ๋งˆ์ง€๋ง‰ ์ธ์ž๋ฅผ ๋ฆฌํ„ดํ•˜๋ฏ€๋กœ alert(2)๊ฐ€ ์‹คํ–‰
// (2) : ์ฒซ๋ฒˆ์งธ truthy๋ฅผ ์ฐพ์•„๋ณด๊ณ  ์—†์œผ๋ฉด ๋งˆ์ง€๋ง‰ ์ธ์ž๋ฅผ ๋ฆฌํ„ดํ•˜๋ฏ€๋กœ alert(1) -> alert(2) ์ˆœ์„œ๋กœ ์‹คํ–‰
// (3) : ์ฒซ๋ฒˆ์งธ falsy๋ฅผ ์ฐพ์•„๋ณด๊ณ  ์—†์œผ๋ฉด ๋งˆ์ง€๋ง‰ ์ธ์ž๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค. null์ด falsy์ด๋ฏ€๋กœ alert(null)๊ฐ€ ์‹คํ–‰
// (4) : ์„ค๋ช… ์ƒ๋žต.  alert(1)์„ ํ˜ธ์ถœํ•˜๋ฉด undefined๊ฐ€ ๋ฆฌํ„ด๋จ ๋”ฐ๋ผ์„œ alert(1) -> alert(undefined)
// (5) : ๋ˆ„๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ด๋ ‡๊ฒŒ ์งฐ์„๊นŒ์š”. &&์˜ ์šฐ์„ ์ˆœ์œ„๋Š” ||๋ณด๋‹ค ๋†’์Šต๋‹ˆ๋‹ค. 
// ๋”ฐ๋ผ์„œ &&๊ฐ€ ๋จผ์ € ์‹คํ–‰๋˜๋ฏ€๋กœ null || 3 || 4๋กœ ์น˜ํ™˜๋ฉ๋‹ˆ๋‹ค. alert(3) ์ถœ๋ ฅ

 

 

if (-1 || 0) alert( 'first' ); // (1)
if (-1 && 0) alert( 'second' ); // (2)
if (null || -1 && 1) alert( 'third' ); // (3)

// (1) : -1 || 0 ์€ -1์ด๋ฏ€๋กœ alert('first') ์‹คํ–‰ 
// (2) : -1 && 0์€ 0์ด๋ฏ€๋กœ ์‹คํ–‰ X
// (3) : -1 && 1์€ 1๋กœ ์น˜ํ™˜. ๋”ฐ๋ผ์„œ null(falsy) || true๋ฅผ ํ‰๊ฐ€ํ•˜๋ฉด true์ด๋ฏ€๋กœ alert('third')์‹คํ–‰

12. nullish ๋ณ‘ํ•ฉ ์—ฐ์‚ฐ์ž '??'

nullish ๋ณ‘ํ•ฉ์—ฐ์‚ฐ์ž '??'๋Š” ์ตœ๊ทผ์— ์ถ”๊ฐ€๋œ ๋ฌธ๋ฒ•์œผ๋กœ ์ด ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์งง์€ ๋ฌธ๋ฒ•์œผ๋กœ ์—ฌ๋Ÿฌ ํ”ผ์—ฐ์‚ฐ์ž์ค‘ ๊ทธ ๊ฐ’์ด "ํ™•์ •๋˜์–ด ์žˆ๋Š”" ๋ณ€์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์‹œ๋ฅผ ํ•˜๋‚˜ ์‚ดํŽด๋ด…์‹œ๋‹ค.

x = a ?? b
  • a๊ฐ€ null๋„ ์•„๋‹ˆ๊ณ  undefined๋„ ์•„๋‹ˆ๋ฉด a
  • ๊ทธ ์™ธ๋Š” b๊ฐ€ x์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

'??' ์—†์ด x = a ?? b์™€ ๋™์ผํ•œ ๋™์ž‘์„ ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

x = (a != null && a != undefined ) ? a : b;

 

??๋Š” ๋ณ€์ˆ˜์— ๊ธฐ๋ณธ๊ฐ’์„ ํ• ๋‹นํ•˜๋Š” ์šฉ๋„๋กœ ๊ฐ’์ด ํ• ๋‹น๋œ ๋ณ€์ˆ˜๋ฅผ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ง์ด์ฃ .

// height๊ฐ€ null์ด๋‚˜ undefined์ธ ๊ฒฝ์šฐ, 100์„ ํ• ๋‹น
height = height ?? 100;

 

??์™€ ||์˜ ์ฐจ์ด

๋ˆˆ์น˜์ฑ„์…จ์„์ง€ ๋ชจ๋ฅด์ง€๋งŒ '??'์€ ๋‹จ๋ฝํ‰๊ฐ€ ์ธก๋ฉด์—์„œ ๋ณธ๋‹ค๋ฉด '||'์™€ ์ƒ๋‹นํžˆ ์œ ์‚ฌํ•œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์œ„ ์˜ˆ์‹œ์—์„œ ??์„ ||๋กœ ๋ฐ”๊ฟ”๋„ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜์ฃ . ํ•˜์ง€๋งŒ ๋‘ ์—ฐ์‚ฐ์ž ์‚ฌ์ด์—๋Š” ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • || ๋Š” ์ฒซ๋ฒˆ์งธ truthy๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ,
  • ?? ๋Š” ์ฒซ๋ฒˆ์งธ ์ •์˜๋œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ •์˜๋œ ๊ฐ’์€ undefined์™€ null, ์ˆซ์ž 0์„ ์ œ์™ธํ•œ ๊ฐ’์œผ๋กœ ์ด ์„ธ ๊ฐ€์ง€ ๊ฐ’์„ ๊ตฌ๋ถ„์ง€์–ด ๋‹ค๋ค„์•ผ ํ•  ๋•Œ '??'๊ฐ€ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

let height = 0;

alert(height || 100); // 100
alert(height ?? 100); // 0
  • ??๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ฃผ์˜ํ•  ์ 
    • ?? ๋Š” ๋Œ€๋‹ค์ˆ˜์˜ ์—ฐ์‚ฐ์ž๋ณด๋‹ค ๋‚ฎ๊ณ  ?์™€ =๋ณด๋‹ค๋Š” ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์œผ๋ฏ€๋กœ ์ œ์•ฝ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด ??๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด ์‚ฌ์šฉํ•ฉ์‹œ๋‹ค.
    • ex) let a = 1 && 2 ?? 3; -> let a = (1&&2) ?? 3;

15. ํ•จ์ˆ˜

์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ž‘์„ฑํ•˜๋‹ค๋ณด๋ฉด ์œ ์‚ฌํ•œ ๋™์ž‘์„ ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ณณ์—์„œ ์žฌ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿด ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…์‹œ๋‹ค.

ํ•จ์ˆ˜ ์„ ์–ธ

ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

function showMessage() {
  alert( '์•ˆ๋…•ํ•˜์„ธ์š”!' );
}

showMessage(); // ํ•จ์ˆ˜ ์‹คํ–‰

 

๋งŒ์•ฝ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ๊ด„ํ˜ธ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

function name(parameter1, parameter2, ... parameterN) {
  // ํ•จ์ˆ˜ ๋ณธ๋ฌธ
}

 

  • ์ž๋ฐ”์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ๋„ ํ•จ์ˆ˜ ๋‚ด์—์„œ ์„ ์–ธํ•œ ์ง€์—ญ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์™ธ๋ถ€๋ณ€์ˆ˜๋„ ํ•จ์ˆ˜๋‚ด๋ถ€์—์„œ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€์™€ ๋™์ผํ•œ ๋ณ€์ˆ˜๋ช…์„ ๊ฐ€์ง„๋‹ค๋ฉด ๋‚ด๋ถ€๋ณ€์ˆ˜๋Š” ์™ธ๋ถ€๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฆฝ๋‹ˆ๋‹ค.

๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ํ•จ์ˆ˜๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let userName = 'John';

function showMessage() {
  userName = "Bob"; // (1) ์™ธ๋ถ€ ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•จ

  let message = 'Hello, ' + userName;
  console.log(message);
}

console.log( userName ); // ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ „์ด๋ฏ€๋กœ John ์ด ์ถœ๋ ฅ๋จ

showMessage();

console.log( userName ); // ํ•จ์ˆ˜์— ์˜ํ•ด Bob ์œผ๋กœ ๊ฐ’์ด ๋ฐ”๋€œ

 

์ž๋ฐ”์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ’์— ์˜ํ•œ ํ˜ธ์ถœ(call by value)์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์„œ๋“œ ๋‚ด๋ถ€์—์„œ (static์ด ์•„๋‹Œ) ์™ธ๋ถ€ ๋ณ€์ˆ˜๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์—†์—ˆ๋Š”๋ฐ, ํ•จ์ˆ˜์—์„œ ์ „์—ญ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ์‹์ด ์ข‹์€ ๊ฑด์ง€๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ๋„ค์š”.

 

๊ธฐ๋ณธ๊ฐ’

ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด ๊ทธ ๊ฐ’์€ undefined๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ '='์„ ์‚ฌ์šฉํ•ด ๊ธฐ๋ณธ๊ฐ’์„ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

showMessage("Ann");

function showMessage(from, text = "no text given") {
  alert( from + ": " + text );
}

showMessage("Ann"); // Ann: no text given

 

  • ๊ธฐ๋ณธ๊ฐ’์€ "ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ" ํ‰๊ฐ€๋˜์–ด ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๊ณ ๋กœ ์•„๋ž˜ ์˜ˆ์‹œ์—์„œ๋Š” text์— ์ธ์ž๊ฐ€ ์ „๋‹ฌ๋˜์ง€ "์•Š๋Š”"๊ฒฝ์šฐ์—๋งŒ anotherFunction()์ด ํ˜ธ์ถœ๋˜์–ด ํ• ๋‹น๋œ๋‹ค๋Š” ๊ฒƒ์ด.
function showMessage(from, text = anotherFunction()) {
  // anotherFunction()์€ text๊ฐ’์ด ์—†์„ ๋•Œ๋งŒ ํ˜ธ์ถœ๋จ
  // anotherFunction()์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด text์˜ ๊ฐ’์ด ๋จ
}

 

return ํ•จ์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋™์  ์–ธ์–ด์ด๊ธฐ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ์–ธ์–ด์—์„œ์ฒ˜๋Ÿผ return ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์ž๋ฃŒํ˜•์„ ๋ช…์‹œํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ๋ฐ˜ํ™˜๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•  ๋•Œ์—๋Š” ์œ„์˜ void ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๊ณ  ๋งˆ์ง€๋ง‰์— return๋งŒ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

function sum(a, b) {
  return a + b;
}

let result = sum(1, 2);
alert( result ); // 3
  • return๋ฌธ์ด ์—†๊ฑฐ๋‚˜ return ์ง€์‹œ์ž๋งŒ ์žˆ๋Š” ํ•จ์ˆ˜๋Š” undefined๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
function doNothing() { /* empty */ }

alert( doNothing() === undefined ); // true

 

  • ์ฃผ์˜ํ•  ์ 
    • return๊ณผ ๊ฐ’ ์‚ฌ์ด์— ์ ˆ๋Œ€ ์ค„์„ ์‚ฝ์ž…ํ•˜์ง€ ๋ง™์‹œ๋‹ค.
    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์ค„๋ฐ”๊ฟˆ๋ฌธ์ž๋ฅผ ์„ธ๋ฏธ์ฝœ๋ก ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜๋„์น˜ ์•Š๊ฒŒ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ค„๋ฐ”๊ฟˆ์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค๋ฉด ๊ด„ํ˜ธ๋ฅผ ํ•„์ˆ˜๋กœ ํ™œ์šฉํ•ฉ์‹œ๋‹ค.
return
 (some + long + expression + or + whatever * f(a) + f(b))
 
// ์‹ค์ œ ๋™์ž‘
return;
 (some + long + expression + or + whatever * f(a) + f(b))

return (
  some + long + expression
  + or +
  whatever * f(a) + f(b)
  );

16. ํ•จ์ˆ˜ ํ‘œํ˜„์‹

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•จ์ˆ˜๋ฅผ "ํŠน๋ณ„ํ•œ ์ข…๋ฅ˜์˜ ๊ฐ’"์œผ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ์ฒ˜๋Ÿผ "ํŠน๋ณ„ํ•œ ๋™์ž‘์„ ํ•˜๋Š” ๊ตฌ์กฐ"๋กœ ์ทจ๊ธ‰๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ํ•จ์ˆ˜๋Š” ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์—, ํ•จ์ˆ˜๋ฅผ ๊ด„ํ˜ธ ์—†์ด ๊ฐ’์œผ๋กœ์„œ ์ถœ๋ ฅํ•ด๋ณด๋ฉด ํ•จ์ˆ˜ ์ฝ”๋“œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
function sayHi() {
  alert( "Hello" );
}

alert( sayHi ); // ํ•จ์ˆ˜ ์ฝ”๋“œ๊ฐ€ ๋ณด์ž„ [Function: sayHi]

 

  • ํ•จ์ˆ˜๋Š” ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์‚ฌ ๋˜ํ•œ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์‹ ๊ธฐํ•˜๋„ค์š”.
function sayHi() {   // (1) ํ•จ์ˆ˜ ์ƒ์„ฑ
  alert( "Hello" );
}

let func = sayHi;    // (2) ํ•จ์ˆ˜ ๋ณต์‚ฌ

func(); // Hello     // (3) ๋ณต์‚ฌํ•œ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰(์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค)!
sayHi(); // Hello    //     ๋ณธ๋ž˜ ํ•จ์ˆ˜๋„ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

 

(1) ์—์„œ ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹์„ ์ด์šฉํ•ด ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ƒ์„ฑํ•œ ํ•จ์ˆ˜๋Š” sayHi๋ผ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
(2) ์—์„  sayHi๋ฅผ ์ƒˆ๋กœ์šด ๋ณ€์ˆ˜ func์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ sayHi ๋‹ค์Œ์— ๊ด„ํ˜ธ๊ฐ€ ์—†๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ด„ํ˜ธ๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด func = sayHi() ๊ฐ€ ๋˜์–ด sayHi ํ•จ์ˆ˜ ๊ทธ ์ž์ฒด๊ฐ€ ์•„๋‹ˆ๋ผ, ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฒฐ๊ณผ(ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’) ๊ฐ€ func์— ์ €์žฅ๋˜์—ˆ์„ ๊ฒ๋‹ˆ๋‹ค.


์ด์   sayHi() ์™€ func()๋กœ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ถ”๊ฐ€๋กœ ๋ณ€์ˆ˜์— ํ•จ์ˆ˜๋ฅผ ํ• ๋‹นํ•˜๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„์‹์—๋Š” ํ•จ์ˆ˜๋กœ์„œ์˜ ๊ฐ’์„ ํ• ๋‹นํ•ด์ฃผ๋Š” ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•จ์ˆ˜ ์„ ์–ธ๊ณผ ๋‹ฌ๋ฆฌ ์„ธ๋ฏธ์ฝœ๋ก ์„ ๋ถ™์—ฌ์ฃผ์–ด์•ผ ํ•œ๋‹ค๋Š” ์  ๊ธฐ์–ตํ•ฉ์‹œ๋‹ค.
// ํ•จ์ˆ˜ ์„ ์–ธ
function sayHi() { 
  alert('hi');
}

// ํ•จ์ˆ˜ ํ‘œํ˜„์‹
let sayHi = function() {
	alert('hi');
};

 

์ฝœ๋ฐฑ ํ•จ์ˆ˜

ํ•จ์ˆ˜๋ฅผ ๊ฐ’์ฒ˜๋Ÿผ ์ „๋‹ฌํ•˜๋Š” ์˜ˆ์‹œ, ํ•จ์ˆ˜ ํ‘œํ˜„์‹์— ๊ด€ํ•œ ์˜ˆ์‹œ๋ฅผ ์ข€ ๋” ์‚ดํŽด๋ด…์‹œ๋‹ค.
๊ทธ ์ „์— ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ 3๊ฐœ ์žˆ๋Š” ํ•จ์ˆ˜์ธ ์•„๋ž˜ ask(question, yes, no)๋ฅผ ๋จผ์ € ๋ด…์‹œ๋‹ค.

function ask(question, yes, no) {
  if (confirm(question)) yes()
  else no();
}

function showOk() {
  alert( "๋™์˜ํ•˜์…จ์Šต๋‹ˆ๋‹ค." );
}

function showCancel() {
  alert( "์ทจ์†Œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์…จ์Šต๋‹ˆ๋‹ค." );
}

// ์‚ฌ์šฉ๋ฒ•: ํ•จ์ˆ˜ showOk์™€ showCancel๊ฐ€ ask ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋จ
ask("๋™์˜ํ•˜์‹ญ๋‹ˆ๊นŒ?", showOk, showCancel);

 

์‹ค๋ฌด์—์„œ ์ด์ฒ˜๋Ÿผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ์‹์€ ์œ ์šฉํ•˜๊ฒŒ ์“ฐ์ž…๋‹ˆ๋‹ค.

 

ํ•จ์ˆ˜ ask์˜ ์ธ์ˆ˜, showOk์™€ showCancel์€ "์ฝœ๋ฐฑ ํ•จ์ˆ˜" ๋˜๋Š” "์ฝœ๋ฐฑ"์ด๋ผ๊ณ  ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.

 

showOk()์™€ showCancel() ํ•จ์ˆ˜๊ฐ€ ์žฌ์‚ฌ์šฉ์˜ ์—ฌ์ง€๊ฐ€ ์—†๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ๊ฒ ๋„ค์š”.

ask(
  "๋™์˜ํ•˜์‹ญ๋‹ˆ๊นŒ?",
  function() { alert("๋™์˜ํ•˜์…จ์Šต๋‹ˆ๋‹ค."); },
  function() { alert("์ทจ์†Œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด์…จ์Šต๋‹ˆ๋‹ค."); }
);

์–ด๋–ค๊ฐ€์š”? ์กฐ๊ธˆ ๋” ๊น”๋”ํ•ด์ง„ ๊ฒƒ ๊ฐ™๋„ค์š”. ์ด๋ ‡๊ฒŒ ์™ธ๋ถ€์— ์„ ์–ธํ•˜์ง€ ์•Š๊ณ  ์ด๋ฆ„์—†์ด ์„ ์–ธํ•œ ํ•จ์ˆ˜๋ฅผ ์ต๋ช… ํ•จ์ˆ˜ ๋ผ๊ณ  ๋ถ€๋ฅด๋Š”๋ฐ์š”. ์ด ํ•จ์ˆ˜๋Š” ๋ณ€์ˆ˜์— ํ• ๋‹น๋œ ๊ฒŒ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ask ๋ฐ”๊นฅ์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. JS๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ์ด๋ ‡๊ฒŒ ์ฝœ๋ฐฑ์„ ํ™œ์šฉํ•œ ์ฝ”๋“œ๋ฅผ ์•„์ฃผ ์ž์—ฐ์Šค๋ ˆ ๋งŒ๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋‹นํ™ฉํ•˜์ง€ ๋ง™์‹œ๋‹ค.

 

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ, ํ•จ์ˆ˜ ํ‘œํ˜„์‹ ์–ด๋–ค ๊ฑธ ์จ์•ผ ํ• ๊นŒ

์„ ์–ธ๋ฌธ๊ณผ ํ‘œํ˜„์‹์€ ์•„๊นŒ ๋งํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์„ธ๋ฏธ์ฝœ๋ก  ์—ฌ๋ถ€๋กœ ๋ณด๋ฉด ๋ฌธ๋ฒ•์—์„œ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์Šค์ฝ”ํ”„ ์ธก๋ฉด์—์„œ, JS ์—”์ง„์ด ์–ธ์ œ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š”์ง€์—์„œ๋„ ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ๋ด…์‹œ๋‹ค.

 

์Šค์ฝ”ํ”„ ์ฐจ์ด

let age = prompt("๋‚˜์ด๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”.", 18);

// ์กฐ๊ฑด์— ๋”ฐ๋ผ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•จ
if (age < 18) {

  function welcome() {
    alert("์•ˆ๋…•!");
  }

} else {

  function welcome() {
    alert("์•ˆ๋…•ํ•˜์„ธ์š”!");
  }

}

welcome(); // Error: welcome is not defined

 

์กฐ๊ฑด์— ๋”ฐ๋ผ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋Š” ๊ฒฝ์šฐ ๋ธ”๋ก ๋‚ด๋ถ€์—์„œ๋งŒ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ธ”๋ก ๋ฐ”๊นฅ์—์„œ๋Š” welcome() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒ ๋„ค์š”. ํ•จ์ˆ˜ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์–ด๋–จ๊นŒ์š”?

let age = prompt("๋‚˜์ด๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”.", 18);

let welcome;

if (age < 18) {

  welcome = function() {
    alert("์•ˆ๋…•!");
  };

} else {

  welcome = function() {
    alert("์•ˆ๋…•ํ•˜์„ธ์š”!");
  };

}

welcome(); // ์ œ๋Œ€๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

 

if-else ๋ธ”๋Ÿญ์—์„œ ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ๊ฐ’์œผ๋กœ์„œ ํ• ๋‹นํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋ธ”๋Ÿญ ๋ฐ–์—์„œ๋„ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์–ธ์ œ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š”๊ฐ€?

ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ์‹ค์ œ ์‹คํ–‰ ํ๋ฆ„์ด ํ•ด๋‹น ํ•จ์ˆ˜์— ๋„๋‹ฌํ–ˆ์„ ๋•Œ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. 

~~ code

let sum = function(a, b) {		//  ๋„๋‹ฌ ์‹œ์ ์— ์ƒ์„ฑ.
  return a + b;
};

~~ code

 

ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ์กฐ๊ธˆ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์„ ์–ธ๋ฌธ์€ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์ด ์ •์˜๋˜๊ธฐ ์ „์—๋„ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ „์—ญ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ์Šคํฌ๋ฆฝํŠธ ์–ด๋””์— ์žˆ๋Š๋ƒ์— ์ƒ๊ด€์—†์ด ์–ด๋””์—์„œ๋“  ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JS๋Š” ๋‹ค๋ฅธ์–ธ์–ด์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์ „ ์ „์—ญ์— ์„ ์–ธ๋œ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์„ ์ฐพ๊ณ  ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋ฏ€๋กœ ์ดˆ๊ธฐํ™” ๋‹จ๊ณ„์—์„œ ํ•จ์ˆ˜ ์„ ์–ธ๋ฐฉ์‹์œผ๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์„ ์–ธ๋ฌธ์œผ๋กœ ์ž‘์„ฑํ•œ ํ•จ์ˆ˜๋Š” ์–ด๋””์— ์„ ์–ธ๋˜์–ด ์žˆ๋˜ ์ƒ๊ด€์—†์ด ์ž˜ ๋™์ž‘ํ•˜์ง€๋งŒ, 

sayHi("John"); // Hello, John

function sayHi(name) {
  alert( `Hello, ${name}` );
}

 

์ด๋ ‡๊ฒŒ ํ‘œํ˜„์‹์œผ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋Š” ์ฝ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

sayHi("John"); // error!

let sayHi = function(name) {  // (*) ๋งˆ์ˆ ์€ ์ผ์–ด๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  alert( `Hello, ${name}` );
};

 

ํ•จ์ˆ˜ ํ‘œํ˜„์‹๊ณผ ์„ ์–ธ๋ฌธ์ค‘ ์–ด๋–ค ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

์œ„์น˜์— ์ƒ๊ด€์—†์ด ์–ด๋””์„œ๋“  ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ธก๋ฉด์—์„œ ๋ณด๋ฉด ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์ด, ์Šค์ฝ”ํ”„ ์ธก๋ฉด์—์„œ๋Š” ํ•จ์ˆ˜ ํ‘œํ˜„์‹์ด ์ข‹์•„๋ณด์ด๋„ค์š”. ํ•˜์ง€๋งŒ ํ•„์ž๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ๊ทผ๊ฑฐ๋กœ ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์„ ๋” ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ € ๋˜ํ•œ ์ด๊ฒŒ ๋” ์ต์ˆ™ํ•œ ๊ฒƒ ๊ฐ™๋„ค์š”.

  1. ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋ฉด, ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋˜๊ธฐ ์ „์— ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ฝ”๋“œ ๊ตฌ์„ฑ์„ ์ข€ ๋” ์ž์œ ๋กญ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋…์„ฑ๋„ ์ข‹์•„์ง‘๋‹ˆ๋‹ค. ์ฝ”๋“œ์—์„œ let f = function(…) {…}๋ณด๋‹ค function f(…) {…} ์„ ์ฐพ๋Š” ๊ฒŒ ๋” ์‰ฝ์ฃ . ํ•จ์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹์ด ๋” “๋ˆˆ๊ธธ์„ ์‚ฌ๋กœ์žก์Šต๋‹ˆ๋‹ค”.
โ€ป  ๊ทธ๋ ‡๋‹ค๊ณ  ํ‘œํ˜„์‹์„ ์“ฐ์ง€ ๋ง๋ผ๋Š” ๋œป์€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด ์”์‹œ๋‹ค.

17. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ๊ธฐ๋ณธ

ํ•จ์ˆ˜ ํ‘œํ˜„์‹๋ณด๋‹ค ๋” ๋‹จ์ˆœํ•˜๊ณ  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Java์—์„œ ๋žŒ๋‹ค์ฒ˜๋Ÿผ์š”.

// ์˜ˆ์‹œ 1
let sum = (a, b) => a + b;

/* ์œ„ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์•„๋ž˜ ํ•จ์ˆ˜์˜ ์ถ•์•ฝ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.
let sum = function(a, b) {
  return a + b;
};
*/

alert( sum(1, 2) ); // 3

// ์˜ˆ์‹œ 2
let double = n => n * 2;
// let double = function(n) { return n * 2 }๊ณผ ๊ฑฐ์˜ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

alert( double(3) ); // 6


// ์˜ˆ์‹œ 3
let age = prompt("๋‚˜์ด๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”.", 18);

let welcome = (age < 18) ?
  () => alert('์•ˆ๋…•') :
  () => alert("์•ˆ๋…•ํ•˜์„ธ์š”!");

welcome();

// ์˜ˆ์‹œ 4 : ๋ณธ๋ฌธ์ด ์—ฌ๋Ÿฌ ์ค„์ธ ๊ฒฝ์šฐ
let sum = (a, b) => {  // ์ค‘๊ด„ํ˜ธ๋Š” ๋ณธ๋ฌธ ์—ฌ๋Ÿฌ ์ค„๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Œ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.
  let result = a + b;
  return result; // ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด, return ์ง€์‹œ์ž๋กœ ๊ฒฐ๊ด๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
};

alert( sum(1, 2) ); // 3

์ด๋ ‡๊ฒŒ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ๋ณธ ์ค‘ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์„ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘์—์„œ๋„ ์กฐ๊ฑด๋ฌธ์ด๋‚˜ ๋ฐ˜๋ณต๋ฌธ์€ ํฌ๊ฒŒ ๋‹ค๋ฅผ ๊ฒŒ ์—†์–ด์„œ ์ƒ๋žตํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถ€์กฑํ•˜๋ฉด ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๋ฌธ๋ฒ•์€ ์ด์ œ ์‹œ์ž‘์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด์™€ ํด๋ž˜์Šค๋ถ€ํ„ฐ JS์—์„œ์˜ ์ž๋ฃŒ๊ตฌ์กฐ, ํ•จ์ˆ˜์˜ ์‹ฌํ™”, ํ”„๋กœํ† ํƒ€์ž…, ์—๋Ÿฌ ํ•ธ๋“ค๋ง, ํ”„๋กœ๋ฏธ์Šค์™€ async/wait, ์ œ๋„ˆ๋ ˆ์ดํ„ฐ์™€ ๋น„๋™๊ธฐ ์ดํ„ฐ๋ ˆ์ด์…˜, ๋ชจ๋“ˆ๊นŒ์ง€ ์•„์ง ๊ฐˆ ๊ธธ์ด ๋ฉ‰๋‹ˆ๋‹ค. ํ•˜๋‚˜์”ฉ ์ฒœ์ฒœํžˆ ํ•ด๋ด…์‹œ๋‹ค.

 

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ณธ

 

ko.javascript.info

 

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

Study Repository

rlaehddnd0422

ํ™œ๋™ํ•˜๊ธฐ