[๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ] - 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
๋ณ์ ๋ช ๋ช ๊ท์น
- ๋ณ์๋ช ์๋ ์ค์ง ๋ฌธ์์ ์ซ์, ๊ทธ๋ฆฌ๊ณ ๊ธฐํธ $์ _๋ง ๋ค์ด๊ฐ ์ ์์ต๋๋ค.
- ์ฒซ ๊ธ์๋ ์ซ์๊ฐ ๋ ์ ์์ต๋๋ค.
- ์์ฝ์ด๋ ๋ณ์๋ช ์ผ๋ก ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. (ex/ let, return,class, function ๋ฑ)
- ๋ณ์๋ช ์ ๊ฐ๊ฒฐํ๊ณ , ๋ช ํํด์ผ ํฉ๋๋ค. ๋ณ์๊ฐ ๋ด๊ณ ์๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์ ์ค๋ช ํ ์ ์์ด์ผ ํ์ฃ . ๋ฌผ๋ก ๋ค์ด๋ฐ์ ๋๊ตฌ์๊ฒ๋ ์ด๋ ต์ต๋๋ค.
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 ์ฐ์ฐ์๋ ์ธ์์ ์๋ฃํ์ ๋ฐํํฉ๋๋ค.
์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง ์ ๋๋ค.
- ์ฐ์ฐ์ : typeof x
- ํจ์ : 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}` );
};
ํจ์ ํํ์๊ณผ ์ ์ธ๋ฌธ์ค ์ด๋ค ๊ฒ์ ์ฌ์ฉํด์ผ ํ ๊น?
์์น์ ์๊ด์์ด ์ด๋์๋ ์ฌ์ฉ๊ฐ๋ฅํ๋ค๋ ์ธก๋ฉด์์ ๋ณด๋ฉด ํจ์ ์ ์ธ๋ฌธ์ด, ์ค์ฝํ ์ธก๋ฉด์์๋ ํจ์ ํํ์์ด ์ข์๋ณด์ด๋ค์. ํ์ง๋ง ํ์๋ ์๋์ ๊ฐ์ ๊ทผ๊ฑฐ๋ก ํจ์ ์ ์ธ๋ฌธ์ ๋ ๊ถ์ฅํ๊ณ ์์ต๋๋ค. ์ ๋ํ ์ด๊ฒ ๋ ์ต์ํ ๊ฒ ๊ฐ๋ค์.
- ํจ์ ์ ์ธ๋ฌธ์ผ๋ก ํจ์๋ฅผ ์ ์ํ๋ฉด, ํจ์๊ฐ ์ ์ธ๋๊ธฐ ์ ์ ํธ์ถํ ์ ์์ด์ ์ฝ๋ ๊ตฌ์ฑ์ ์ข ๋ ์์ ๋กญ๊ฒ ํ ์ ์์ต๋๋ค.
- ํจ์ ์ ์ธ๋ฌธ์ ์ฌ์ฉํ๋ฉด ๊ฐ๋ ์ฑ๋ ์ข์์ง๋๋ค. ์ฝ๋์์ 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
'๐ Frontend > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ] - ํด๋์ค(class) ๊ธฐ๋ณธ ๋ฌธ๋ฒ (3) | 2024.09.28 |
---|---|
[๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ] - ๊ฐ์ฒด(Object) (0) | 2024.09.28 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422