ํด๋ฆฐ์ฝ๋ ์๋ฐ์คํฌ๋ฆฝํธ
January 20, 2024
-
11. ๋ช ์์ ์ธ ์ฝ๋ ์์ฑํ๊ธฐ(Default Case, ์ฐ์ฐ์)
- 14. JavaScript์ ๋ฐฐ์ด์ ๊ฐ์ฒด๋ค
- 15. ๋ฐฐ์ด ์์์ ์ ๊ทผํ๊ธฐ
- 18. ๋ฐฐ์ด ๊ณ ์ฐจํจ์์์ break๋ continue๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋
- 21. ๊ฐ์ฒด ๋ณ๊ฒฝ ๋ฐฉ์ง ๋ฉ์๋
1. ๋ณ์ ๋ค๋ฃจ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ ํน์ฑ ํ์ ํ๊ธฐ
-
๋ชฝํค ํจ์น
- ๋ฐํ์ ์ค์ธ ํ๋ก๊ทธ๋จ์ ๋ด์ฉ์ด ๋ณ๊ฒฝ๋๋ ํ๋์ ์๋ฏธํ๋ค.
-
์๋ฐ์คํฌ๋ฆฝํธ๋ ์ฌ๋ฌ ์ธ์ด์ ํน์ฑ์ด ํฉ์ณ์ก๋ค.
- ๋ฌธ๋ฒ์ ์๋ฐ์ ๋น์ทํ๋ค.
- ๋ฌธ์์ด๊ณผ ๋ฐฐ์ด ์ ๊ทํํ์์ ํ๊ณผ ๋น์ทํ๋ค.
- ํจ์๋ ์คํฌ์ ๋น์ทํ๋ค.
- ํด๋ก์ ์ ์ค์ฝํํ๊ฒฝ์ ์คํค๋ง์ ๋น์ทํ๋ค.
- ํํ ํ ํ์ ๊ฐ๋ ์ ์ ํ์์ ์๋ค.
- ์ด๋ฒคํธ๋ ํ์ดํผํ ํฌ์์ ์๋ค.
- ์ข์ ์ฅ์ ๋ ์์ง๋ง, ๋์ ๋จ์ ๋ ์๋ค.
var๋ฅผ ์ง์ํ์
- var๋ ํจ์ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ค.
-
let๊ณผ const๋ ๋ธ๋ก ๋จ์ ์ค์ฝํ์ TDZ๋ผ๋ ํน์ฑ์ ๊ฐ์ง๋ค. ์ด๋ฅผ ํตํด ์์ ํด์ง๋ค.
- let๊ณผ const๋ ์ฌ์ ์ธํ ์ ์๊ณ
- let์ ์ฌํ ๋นํ ์ ์์ผ๋, const๋ ์ฌํ ๋นํ ์ ์๋ค.
function scope & block scope
var global = "์ ์ญ"
if (global === "์ ์ญ") {
var global = "์ง์ญ"
console.log(global) //์ง์ญ
}
console.log(global) //์ง์ญ
-
var๋ ํจ์ ๋จ์ ์ค์ฝํ๋ผ์, ํจ์ ๋ด์์ ์ ์ธ ํ ๋น๋ ๊ฒฝ์ฐ ๊ทธ ์์์ ์ํฅ์ ๋ฏธ์น๋๋ฐ,
- ์ ์ฝ๋์์๋ ํจ์๊ฐ ์๋ if๋ฌธ ๋ด์์ ์ ์ธ ํ ๋น๋ var๊ฐ ์ ์ญ๊น์ง ์ํฅ์ ๋ฏธ์น๊ณ ์๋ค.
let global = "์ ์ญ"
if (global === "์ ์ญ") {
let global = "์ง์ญ"
console.log(global) //์ง์ญ
}
console.log(global) //์ ์ญ
- let์ ์ฌ์ฉํ์, ๋ธ๋ก ๋จ์ ์ ์ธ ํ ๋น๋ let์ ๋ธ๋ก ๋ด์์๋ง ์ํฅ์ ๋ฏธ์น๊ณ , ๋ธ๋ก ๋ฐ๊นฅ ์ ์ญ์ผ๋ก๋ ์ํฅ์ ๋ชป ๋ฏธ์น๋ค. ์์์ ์์ฝ์ด๋ฅผ let์ const๋ก ๋ฐ๊ฟ๋ ๋ง์ฐฌ๊ฐ์ง๋ค.
let๋ณด๋ค const๋ฅผ ์ฐ์ ์ ์ผ๋ก ์ฌ์ฉํ๋ ํธ์ด ๋ซ๋ค
- let์ ์ธ ๊ฒฝ์ฐ ์ฌํ ๋น์ด ๋์ด ๋ฐ์ดํฐ๊ฐ ๋ฐ๋ ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- const ๊ฐ์ฒด ๋ด ํ๋กํผํฐ์ ๊ฐ์ ๋ฐ๊ฟ ์ ์๋ค. const๋ ์ฌํ ๋น๋ง ๊ธ์งํ๋ค. ๊ฐ์ฒด๋ ๋ฐฐ์ด ๊ฐ์ ๋ ํผ๋ฐ์ค ๊ฐ์ฒด๋ค์ ์กฐ์ํ ๋๋ ์ด์์ด ์๋ค.
const person = {
name: "jang",
age: "30",
}
person.name = "lee"
person.age = "22"
console.log(person)
/*[object Object] {
age: "22",
name: "lee"
}*/
์ ์ญ ๊ณต๊ฐ ์ฌ์ฉ ์ต์ํ
-
์ ์ญ๊ณต๊ฐ : window(๋ธ๋ผ์ฐ์ ), global(nodeJS) ๋ฑโฆ
- ์ ์ญ๊ณต๊ฐ์ ์ต์์ ํ๊ฒฝ์ด๋ฉฐ, ๋ธ๋ผ์ฐ์ ์ ๋ ธ๋JSํ๊ฒฝ์ ๊ฐ๊ฐ ์๋ค.
-
์ ์ ์ญ ๊ณต๊ฐ์ ์นจ๋ฒํ๋ฉด ์๋๋?
- ํ์ผ์ ๋๋ ๋ ์ค์ฝํ๋ ๋๋ ์ง์ง ์๋๋ค. ์ ์ญ ๊ณต๊ฐ์ ์นจ๋ฒํ์ฌ ์ ์ฅํ๋ฉด ์ด๋์๋ ์ ๊ทผ๋ ์ ์๋ค.
-
ํด๊ฒฐ ๋ฐฉ๋ฒ
- ์ ์ด์ ์ ์ญ๋ณ์๋ฅผ ๋ง๋ค์ง ์๋๋ค.
- ์ง์ญ๋ณ์๋ก๋ง ๋ง๋ ๋ค.
- window,global์ ์กฐ์ํ์ง ์๋๋ค.
- const, let ์ ์ฌ์ฉํ๋ค
- IIFE(์ฆ์์คํํจ์), Module, Closuer, โ ์ค์ฝํ๋ฅผ ๋๋๊ธฐ
์์ ๋ณ์ ์ ๊ฑฐํ๊ธฐ
-
์์ ๋ณ์๋ scope ์์์ ์ ์ญ๋ณ์์ฒ๋ผ ํ์ฉ๋๋ ๋ณ์๋ฅผ ์๋ฏธํ๋ค.
- ์์ ๋ณ์๊ฐ ์๋ ๊ฐ์ฒด๋ ๊ท๋ชจ๊ฐ ์ปค์ง๋ฉด ์ ์ญ ๊ณต๊ฐ์ด๋ ๋ค๋ฆ ์๋ ์ํฉ์ด ์ฌ ์ ์๋ค. ๊ทธ๋ฌ๋ฉด ์ด ์์ ๊ฐ์ฒด๊ฐ ๋งค์ฐ ์ํํ ์์๊ฐ ๋ ์ ์๋ค.
- ์์๋ณ์๋ ๋ช ๋ นํ์ผ๋ก ๊ฐ๋ํ ๋ก์ง์ด๋ผ ์ข์ง ์๋ค.
- ์์๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋์ ๋ฌด์์ด ์๋ชป๋๋์ง ์ ์ ์์ด์ ๋๋ฒ๊น ํ๊ธฐ ํ๋ค๋ค.
- ์์๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ถ๊ฐ์ ์ธ ์ฝ๋ ์์ฑ์ ์ ํน์ด ์๊ฒจ ์ ์ง๋ณด์๋ฅผ ํ๋ค๊ฒ ๋ง๋ ๋ค.
-
์์๋ณ์๋ ์์๊ฐ์ฒด๋ฅผ ์ด๋ป๊ฒ CRUD(์กฐ์)ํ ์ ์์๊น?
- ๋ฌผ๋ก ํจ์๋ฅผ ๋ง์ด ์ชผ๊ฐ๋ฉด ์ข์ผ๋, ๋ ๊ฐ๋จํ ๋ฐฉ๋ฒ์ ์์๋ณ์(๊ฐ์ฒด)๋ฅผ ๋ง๋ค์ง ์๊ณ ๋ฐ๋ก ๊ฐ์ฒด๋ก ๋ฐํํ๋ ๊ฒ์ด๋ค.
- ์์ ๊ฐ์ฒด๊ฐ ์๊ธฐ๋ฉด, ์ฌ๊ธฐ์ ๊ณ์ ์ ๊ทผํด์ ๋ญ๊ฐ ๋ง๋ค๊ณ ๋ฃ๊ณ ์ง์ฐ๋ CRUD๊ฐ ๋ฐ๋ณต๋ ์ํ์ด ์์ด์ ์ข์ง ์๋ค.
-
ํด๊ฒฐ์ฑ
- ํจ์ ๋๋๊ธฐ
- ๋ฐ๋ก ๋ฐํํ๋ค
function getElements() { const result = {} //์์ ๊ฐ์ฒด ;(result.title = document.querySelector(".title")), (result.text = document.querySelector(".text")), (result.value = document.querySelector(".value")) return result }
โฌ๏ธ ์ ์ฝ๋์ฒ๋ผ ์์๊ฐ์ฒด๋ฅผ ๋์ง ๋ง๊ณ ์๋ ์ฝ๋์ฒ๋ผ ๋ฐ๋ก ๊ฐ์ฒด๋ก ๋ฐํ
function getElements() { return { title: document.querySelector(".title"), text: document.querySelector(".text"), value: document.querySelector(".value"), } }
- ๊ณ ์ฐจํจ์(map, filter, reduce) ์ฌ์ฉ
- ์ ์ธํ ์ฝ๋๋ก ๋ฐ๊พผ๋ค
ํธ์ด์คํ ์ฃผ์ํ๊ธฐ
- ํธ์ด์คํ ์ ์ ์ธ๊ณผ ํ ๋น์ด ๋ถ๋ฆฌ๋ ๊ฒ์ ์๊ฐํ๋ฉด ์ฝ๋ค. ๋ฐํ์(์ฝ๋ ๋์) ์๊ธฐ์ ์ ์ธ๊ณผ ํ ๋น์ด ๋ถ๋ฆฌ๋๋ค.
- ํธ์ด์คํ ์ ๋ฐํ์ ์์ ์ ์ธ์ ์ต์๋จ์ผ๋ก ๋์ด์ฌ๋ ค์ฃผ๋ ๊ฒ์ด๋ค.
- ์ฝ๋๋ฅผ ์์ฑํ ๋๋ ์ค์ฝํ ๋์์ ์์ํ๋๋ฐ, ๋ฐํ์์์๋ ์๊ฐ๋๋ก ๋์ํ์ง ์๋๋ค. ๊ทธ ์ด์ ๋ ํธ์ด์คํ ๋๋ฌธ์ด๋ค.
var global = 0 //var๋ ํจ์ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋ค
function outer() {
console.log(global) // undefined
// ์ ์ฝ์๋ก๊ทธ์ undefined๋ ์๋์ var global์ ํธ์ด์คํ
์ด ๋์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ง์ฝ ์๋์ var global = 5 ์ฝ๋๊ฐ ์์๋ค๋ฉด, 1๋ผ์ธ์ var glboal = 0;์ ์ํด ์ฝ์์ 0์ด ์ฐํ๋ค.
var global = 5
function inner() {
var global = 10
console.log(global) // 10
}
inner()
global = 1
console.log(global) // 1
}
outer()
- ํจ์๋ ํธ์ด์คํ ๋๋ค. ํจ์์ ์ธ๋ฌธ์ผ๋ก ๋ณ์๊ฐ ๋ฎ์ด์ง ์ ์๋ค.
- ํจ์๋ฅผ ๋ง๋ค ๋ const๋ฅผ ์ฌ์ฉํด์ ๋ง๋ ํ ํจ์๋ฅผ ํ ๋นํ๋ ๋ฐฉ์์ด ์ถ์ฒ๋๋ค.
// ์๋์ฒ๋ผ ํจ์ํํ์์ผ๋ก ๋ง๋๋ ๊ฒ์ด ๊ถ์ฅ๋จ
const sum = function() {
return 1 + 2
}
-
ํด๊ฒฐ์ฑ
- var๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. const๋ฅผ ์ฌ์ฉํ๋ค.
- ํจ์๋ ์กฐ์ฌํ๋ค. ํจ์ ํํ์์ ์ฌ์ฉํ๋ค.
2. ํ์ ๊ฒ์ฌ ๋ฐฉ๋ฒ
typeof
typeof
์ฐ์ฐ์๋ ๋ฌธ์์ด๋ก ๋ฐํํ๋ค.- typeof๋ง์ผ๋ก ๋ชจ๋ ํ์ ๊ฒ์ฌ๊ฐ ๋ค ์ปค๋ฒ๋์ง ์๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ์
์ ํฌ๊ฒ ๊ตฌ๋ถํด๋ณด๋ฉด,
Primitive(์์๊ฐ)
์Reference(์ฐธ์กฐ๊ฐ)
์ผ๋ก ๋๋ ์ง๋ค. - ์์๊ฐ์ typeof๋ก ์ ๊ฒ์ฌํ ์ ์์ผ๋, ์ฐธ์กฐ๊ฐ์ typeof๋ก ๊ตฌ๋ถํ๊ธฐ ์ด๋ ต๋ค. ๋ฐ๋ผ์ typeof๊ฐ ๋ง๋ฅ์ด ์๋๋ค.
-
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋์ ์ผ๋ก ๋ณํ๋ ์ธ์ด์ด๊ธฐ ๋๋ฌธ์, ํ์ ๋ ๋์ ์ด๋ค. ๋์ ์ผ๋ก ๋ณํ๋ ํ์ ์ ๊ฒ์ฌํ๊ธฐ ์ด๋ ค์ฐ๋ฏ๋ก ์ฃผ์ํด์ผ ํ๋ค.
-
typeof๋ Wrapper ๊ฐ์ฒด๋ก ๋ ์์๊ฐ๋ค์ ํ์ ์ ์์๊ฐ ํ์ ์ผ๋ก ํ์ํ์ง ๋ชปํ๋ค.
- typeof๋ function๊ณผ class ๋ชจ๋ function์ผ๋ก ํ์ํ๋ค. (class๋ function์ ๋ํ ๋ฌธ๋ฒ์ ์คํ..?)
- ๋ํ, array, object, null์ ๋ชจ๋ object ํ์ํ๋ค. null์ ํ์ ์ด object๋ก ํ์๋๋ ๊ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ์ธ์ ํ ์ค๋ฅ์ด๋ค.
instanceof
-
instanceof
์ฐ์ฐ์๋typeof
์ฐ์ฐ์์ ๋น์ทํ๋ค.instanceof
์ฐ์ฐ์๋ ๊ฐ์ฒด์ ํ๋กํ ํ์ ์ฒด์ธ์ ๊ฒ์ฌํ๋ ์ฐ์ฐ์์ด๋ค.- ํด๋น ์ธ์คํด์ค๊ฐ ์ด๋ค ๊ฐ์ฒด์ ์ธ์คํด์ค์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ธํ ์ ์๋ค.
- ๋ชจ๋ ์ธ์คํด์ค๋ ๋ณธ์ง์ ์ผ๋ก ๊ฐ์ฒด์ ์ธ์คํด์ค์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์, ๋ฐฐ์ด, ๋ฐ์ดํธ ๊ฐ์ฒด ๊ฐ์ ๊ฒฝ์ฐ์๋ ํ๋กํ ํ์
์ฒด์ธ์ ํ๊ธฐ ๋๋ฌธ์ ์ต์์์๋
Object
๊ฐ ์๋ค. - ์ด๋ฐ ํน์ฑ ๋๋ฌธ์ ํ์ ๊ฒ์ฌ๋ฅผ ํ๋ ๊ฒ์ด ๋์ฑ ์ด๋ ต๋ค. ์ด๋ฌํ ํ์ ๊ฒ์ฌ์ ์ด๋ ค์์ด ์์ด์ ๋ ํ๋ ์ ๊ณต๋๋ ๊ธฐ๋ฅ์ด ์๋ค.
Object.prototype.toString.call(โ)
-
Object.prototype.toString.call('')
๋ฅผ ์ฌ์ฉํ๋ฉด, ๋ฌธ์์ด ์์ ๋๊ดํธ๋ก ๋ฌถ์ฌ์ ํ์ ์ด ํ์๋๋ค.- ์ด ๊ธฐ๋ฅ์ Wrapper ๊ฐ์ฒด์ ํ์
๊น์ง ์ ํํ๊ฒ ํ์ํ ์ ์๋ค.
- ์ด ๊ธฐ๋ฅ์ Wrapper ๊ฐ์ฒด์ ํ์
๊น์ง ์ ํํ๊ฒ ํ์ํ ์ ์๋ค.
์์ฝ
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ์ ์ ๋์ ์ด๋ฏ๋ก, ํ์ ๊ฒ์ฌ๊ฐ ์ด๋ ต๋ค. ๋ง์ ํ์ ๊ฒ์ฌ ๋ฐฉ๋ฒ์ด ์๊ธฐ ๋๋ฌธ์, ์ด๋ค ํ์ ์ ๊ฒ์ฌํ ๋๋ง๋ค ๊ตฌ๊ธ(์คํ์ค๋ฒํ๋ก์ฐ ๋ฑ)์ ๊ฒ์ํด์ ๊ทธ ์ํฉ์ ์ต์ ์ธ ๋ฐฉ๋ฒ์ ์ ํํ๋ ๊ฒ์ด ์ข๋ค.(๋ํ ์นํ์ด์ง๋ ๋ต๋ณ๊ธ์ ๊ฒ์์ผ์ด ์ต์ ์ธ์ง ํ์ธ)
3. undefined์ null ๋น๊ต
- undefined์ null์ ์ฌ์ฉํ ๋ ์ฌ๋ฌ ๊ฒฝ์ฐ์์ ํท๊ฐ๋ฆฐ๋ค.
-
MDN์์๋ ๊ฐ๊ฐ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ด ์ ์ํ๋ค.
null
์ JavaScript์ย ์์ ๊ฐย ์ค ํ๋๋ก, ์ด๋ค ๊ฐ์ด ์๋์ ์ผ๋ก ๋น์ด์์์ ํํํ๋ฉฐ ๋ถ๋ฆฌ์ธ ์ฐ์ฐ์์๋ย ๊ฑฐ์ง์ผ๋ก ์ทจ๊ธํฉ๋๋ค- ์ ์ญย
undefined
ย ์์ฑ์ย [undefined]ย ์์ ๊ฐ์ ๋ํ๋ด๋ฉฐ, JavaScript์ย ์์ ์๋ฃํย ์ค ํ๋์ ๋๋ค.
- null๊ณผ undefined์ ๋ํด ์ดํด๋ณด์.
null
- null์ ๋ํด not ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํผ์ฐ์ฐ์ null์ ๋ถ๋ฆฐํ(null์ ๋ถ๋ฆฐํ์ false)์ผ๋ก ๋ณํํ๊ณ ๊ทธ ์ญ์ ๋ฐํํ๋ค.
console.log(!null) // true
console.log(!!null) //false
console.log(!null === true) // true
console.log(!!null === false) // true
- ํ์ง๋ง, ๊ทธ๋ฅ
null === false
๋ฅผ ํ๊ฐํด๋ณด๋ฉด, ๋์ ๋ค๋ฅด๋ค๊ณ ๋ฐํ๋๋คโฆ
console.log(null === false) //false
- null์ ์ํ์ ์ผ๋ก๋ 0์ด๋ค.
// null์ ์ํ์ ์ผ๋ก๋ 0์ด๋ค.
console.log(null + 123) // 123
undefined
- undefined๋ ์๋ฌด๊ฒ๋ ์ง์ ํ์ง ์์์ ๋ ๊ธฐ๋ณธ๊ฐ์ด๋ค. ์ฆ, ๋ณ์๋ฅผ ์ ์ธํ์ง๋ง ๊ฐ์ ์ ์(ํ ๋น)ํ์ง ์์ ๊ฒ์ด๋ค.
let varb
console.log(varb) // undefined
console.log(typeof varb) // undefined
- undefined์ ๋ํด not ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด null์ฒ๋ผ true ๋ถ๋ฆฐํ์ด ๋๋ค.
console.log(!undefined) // true
console.log(!!undefined) // false
- ํ์ง๋ง undefined์ null์ด ๊ฐ๋๊ณ ํ๊ฐํ๋ฉด ์ญ์ ๋ค๋ฅด๋ค๊ณ ๋ฐํ๋๋ค.
console.log(undefined === null) // false
- undefined๋ก ์ฐ์๋ฅผ ํ๋ฉด null๊ณผ๋ ๋ค๋ฅด๊ฒ NaN๊ฐ ๋์จ๋ค.
console.log(undefined + 123) // NaN
์์ฝ
-
๋ฐ๋ผ์ undefined์ null์ ํจ๊ป ํ์ฉํ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ๋ณด๋ค๋, ํ์์ ๋น์ด ์๋ ๊ฐ์ ๋ ์ค์ ๋ฌด์์ผ๋ก ํ ์ง ์ปจ๋ฒค์ ์ ์ ํ์ฌ ์ผ๊ด์ฑ์๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
- null๊ณผ undefined๋ฅผ ์ธ ๋ ์๋์ ๊ฐ์ ํน์ฑ์ ํ์ ํ๊ณ ์กฐ์ฌํด์ผ ํ๋ค.
-
null๊ณผ undefined ๋น๊ต ์ ๋ฆฌ
-
null
- ๊ฐ์ด ์์์ ๋ช ์์ ์ผ๋ก ํํํ๊ธฐ ์ํ ๊ฐ
- ์ํ์ ์ผ๋ก 0์ ๊ฐ๊น๋ค.
- type์ object์ด๋ค.
-
undefined
- ๊ฐ์ด ์ ์๋์ง ์์์ ๋ ๊ธฐ๋ณธ์ผ๋ก ์ ํด์ง๋ ๊ฐ
- ์ํ์ ์ผ๋ก ์ฌ์ฉํ๋ ค๊ณ ํ๋ฉด NaN๊ฐ ๋์จ๋ค.
- type์ undefined์ด๋ค.
-
4. qeq ์ค์ด๊ธฐ
๋๋ฑ ์ฐ์ฐ์(==, eqeq)
-
๋๋ฑ ์ฐ์ฐ์(== , Equality)
[MDN์ ์]
: ๋๋ฑ ์ฐ์ฐ์(==)๋ ๋ ๊ฐ์ ํผ์ฐ์ฐ์๊ฐ ๋์ผํ์ง ํ์ธํ๋ฉฐ, Boolean๊ฐ์ ๋ฐํํฉ๋๋ค.ย ์ผ์น ์ฐ์ฐ์(===)์๋ ๋ค๋ฅด๊ฒ ๋ค๋ฅธ ํ์ ์ ํผ์ฐ์ฐ์๋ค๋ผ๋ฆฌ์ ๋น๊ต๋ฅผ ์๋ํฉ๋๋ค.- โ=โ์ด equality์ธ๋ฐ ์ด๋ฅผ ์ค์ฌ์ ๋งํ๋ฉด eq์ด๊ณ , ๋๋ฑ์ฐ์ฐ์๋ โ=โ์ด ๋ ๊ฐ์ด๋ฏ๋ก
eqeq
๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
-
๋๋ฑ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ ๋ณํ(type casting)์ด ์ผ์ด๋๋ค.
- ๊ฒ์ฌ๋ง ํ์ ๋ฟ์ธ๋ฐ, ํ ๋ณํ(type casting)์ด ๋ฐ์ํ๋ฏ๋ก ์ํํ๋ค.
- ์ด์ฒ๋ผ ๋์คํ ๋๋ฑ ์ฐ์ฐ์๋ก ๊ฒ์ฌํ๋ฉด, ๋์ค์ ์ด๋ ํ ์ค๋ฅ๋ฅผ ๋ถ๋ฌ์ฌ์ง ๋ชจ๋ฅด๋ฏ๋ก ์ํํ๋ค.
console.log("1" == 1) // true
console.log(1 == true) // true
์ผ์น ์ฐ์ฐ์(===, eqeqeq)
-
์ผ์น ์ฐ์ฐ์(===, Strict Eqaulity)
[MDN์ ์]
: ์ผ์น ์ฐ์ฐ์(===)๋ ๋ ๊ฐ์ ํผ์ฐ์ฐ์๊ฐ ๋์ผํ์ง ํ์ธํ๋ฉฐ, Boolean ๊ฐ์ ๋ฐํํฉ๋๋ค. ๋๋ฑ ์ฐ์ฐ์(==)์๋ ๋ค๋ฅด๊ฒ ๋ค๋ฅธ ํ์ ์ ํผ์ฐ์ฐ์๋ฅผ ํญ์ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.- โ=โ์ด equality์ธ๋ฐ ์ด๋ฅผ ์ค์ฌ์ ๋งํ๋ฉด eq์ด๊ณ , ์ผ์น์ฐ์ฐ์๋ โ=โ์ด ์ธ ๊ฐ์ด๋ฏ๋ก
eqeqeq
๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
console.log("1" === 1) // false
console.log(1 === true) // false
- ์ด๋ป๊ฒ๋ ํ ๋ณํ์ ์๋์ผ๋ก ํ ๋ค์ ์ผ์น ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ๊ฒ ๊ฒ์ฌํด์ผ ํ๋ค.
console.log(Number("1") === 1) // true
console.log(Boolean(1) === true) // true
์์ฝ
-
eqeq(==)
๋์eqeqeq(===)
๋ฅผ ์ฌ์ฉํ๋ค.- ํนํ ํ์
์ ํญ์
eqeqeq
๋ง์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ผ๋ฏ๋ก, ์ด์ ๊ด๋ จ๋ ESLint ์ค์ ์ ํ๋ ๊ฒ์ด ์ข๋ค. https://eslint.org/docs/rules/eqeqeq
- ํนํ ํ์
์ ํญ์
ํ ๋ณํ ์ฃผ์ํ๊ธฐ
- ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํ๊ฐํ์ ๋, ์๋ฌต์ ์ผ๋ก ํ ๋ณํ์ด ์ผ์ด๋ ์ ์๋ค.
console.log(11 + " ๋ฌธ์์ ๊ฒฐํฉ") // '11 ๋ฌธ์์ ๊ฒฐํฉ'
console.log(!!"๋ฌธ์์ด") // true
console.log("11") // 11
- ์์ ํ๊ฒ ๋ณํํ๋ ค๋ฉด, ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ๋ณํํด์ผ ํ๋ค. Wrapper ๊ฐ์ฒด ๋ฑ์ ํ์ฉํ์ฌ ๋ช ์์ ๋ณํํ ์ ์๋ค.
console.log(String(11 + " ๋ฌธ์์ ๊ฒฐํฉ")) // '11 ๋ฌธ์์ ๊ฒฐํฉ'
console.log(Boolean(!!"๋ฌธ์์ด")) // true
console.log(Number("11")) // 11
5. isNaN
isNaN()
-
isNaN
= is Not A Number?- isNaN() ํจ์๋ ์ด๋ค ๊ฐ์ด NaN์ธ์ง ํ๋ณํ๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ค๋ฅธ ๋ชจ๋ ๊ฐ๊ณผ ๋ฌ๋ฆฌ, NaN์ ๊ฐ์ ์ฐ์ฐ(==, ===)์ ์ฌ์ฉํด ํ๋ณํ ์ ์๊ธฐ ๋๋ฌธ์, NaN์ ํ๋ณํ๋ ํจ์๊ฐ ํ์ํ๊ณ ๊ทธ ๊ฒฐ๊ณผ
isNaN
๋ฉ์๋๊ฐ ์๊ฒผ๋ค. NaN์ type์ number(typeof NaN => Number
)์ธ๋ฐ,isNaN(NaN)
์ ๊ฒฐ๊ณผ๋ true (= Not a number)๋ผ์ ํท๊ฐ๋ฆด ์ ์๋ค. - ์ด ๋ฉ์๋๋ ์ซ์๊ฐ ์๋ ๊ฒ์ด๋๊ณ ๋ถ์ ์ ๋ฌป๋ ๊ฒ์ด๊ธฐ์ ๊ฒฐ๊ณผ๊ฐ์ ์์ํ ๋ ํท๊ฐ๋ฆฌ๊ธฐ ์ฝ๋ค. ๋จ์ํ๊ฒ, false๊ฐ ๋ฐํ๋๋ฉด ์ซ์์ด๊ณ , true๊ฐ ๋ฐํ๋๋ฉด ์ซ์๊ฐ ์๋๋ค๋ ๋ป์ผ๋ก ์ดํดํ ์ ์๋ค.
- ํ์ง๋ง ๋ ์ ํํ๊ฒ๋
"์ด ๊ฐ์ด, ์ซ์๊ฐ์ผ๋ก ๊ฐ์ (coercion, ๊ฐ์ ํ ๋ณํ)๋๋ ๊ฒฝ์ฐ, IEEE-754 ํ์ค์ ๋ฐ๋ฅธ 'Not A Number' ๊ฐ์ธ๊ฐ?"
๋ฅผ ๋ฌป๋ ๊ฒ์ด๋ค.
[IEEE-754 ๊ฐ๋จ ์ค๋ช ] ์ปดํจํฐ์ ์ธ๊ฐ์ 2์ง์์ 10์ง์๋ฅผ ํตํด ์ํตํ๋๋ฐ, ์ด๋ ๊ฒ 2์ง์์ 10์ง์ ์ฌ์ด๋ฅผ ์๋ค๊ฐ๋ค ํ๋ค๋ณด๋ฉด ์์์ ์ด๋ผ๋ ๊ฐ๊ทน์ด ์๊ธด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ ์ด ๊ฐ๊ทน์ ์ปดํจํฐ์์ ๋ถ๋์์์ (๋ ๋์ด ์์์ )์ ํํํ๋ IEEE-754 ํ์ค์ ํตํด ํด๊ฒฐํ๋ ค๊ณ ํ๋ค.
console.log(isNaN(123)) // false, ์ซ์๊ฐ ์๋ ๊ฒ์ด ์๋๋ค. ์ฆ, ์ซ์๊ฐ ๋ง๋ค.
Number.isNaN()
isNaN
๊ณผNumber.isNaN
์ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅด๋ค.
console.log(isNaN(123 + "ํ
์คํธ")) // true
console.log(Number.isNaN(123 + "ํ
์คํธ")) // false
-
์๋์ ๊ฐ์ด ๋ฌธ์์ด์ ํผ์ฐ์ฐ์๋ก isNaN ๋ฉ์๋๋ฅผ ํ ๊ฒฐ๊ณผ, true ๊ฐ ๋์ค๋๋ฐ ์ด๋ ์๋ฆฌ์ ์๋ชป๋ ๊ฒ์ด๋ค.
- ์ ์ญ isNaN ๋ฉ์๋๋ ์ด๋ฅผ ์ซ์๋ก parsingํ๋ ๊ฒ์ ์คํจํ๊ณ NaN๋ฅผ ๋ฐํํ์ฌ true๊ฐ ํ์๋๋ค.
- ์ด๋ฌํ ์ฌ๋ก ๋๋ฌธ์, ์ ์ญ isNaN์ ์์ ํ ์ ๋ขฐํ ์๋ ์๋ค๊ณ ํ๋จํ๊ฒ ๋์ด, ๊ทธ ๋์์ผ๋ก
Number.isNaN
์ด ๋ฑ์ฅํ๋ค.
isNaN("blabla") // true
-
์ด์ฒ๋ผ
isNaN
๋์คํ ๊ฒ์ฌ๋ฅผ ํ๋ค๋ ๋ฌธ์ ๊ฐ ์์ด์, ES2015์์๋ถํฐ ๋ ์๊ฒฉํ ๋ฒ์ ์ธNumber.isNaN
์ด ๋์ ๋๋ค.Number.isNaN()
๋ฉ์๋๋ ์ ๋ฌ๋ ๊ฐ์ด NaN์ด๊ณ ํ์ ์ด Number์ธ์ง ํ์ธํ๋ค.
Number.isNaN(NaN) // true
Number.isNaN(Number.NaN) // true
Number.isNaN(0 / 0) // true
// ์ ์ญ isNaN()์์๋ ์๋ true ์์ ์ฌ๋ก๋ค
Number.isNaN("NaN") // false
Number.isNaN(undefined) // false
Number.isNaN({}) // false
Number.isNaN("blabla") // false
// ์๋๋ ๋ชจ๋ false๋ค.
Number.isNaN(true)
Number.isNaN(null)
Number.isNaN(37)
Number.isNaN("37")
Number.isNaN("37.37")
Number.isNaN("")
Number.isNaN(" ")
์์ฝ
- ๋ฐ๋ผ์ ์๊ฒฉํ ๋ฒ์ ์ธ
Number.isNaN
์ ์ฐ๋ ๊ฒ์ด ๊ถ์ฅ๋๋ค.
6. ๊ฒฝ๊ณ๋ฅผ ๋ค๋ฃจ๋ ์ปจ๋ฒค์
1) min-max
function isAdult(age) {
if (age > 20) {
}
}
const MAX_AGE = 20 // ๊ฐ์ ํ๋์ฝ๋ฉํ์ง ์๊ณ ์์ํํ์ฌ ๋ค๋ฅธ ์ฌ๋์ด ์ด ์ฝ๋๋ฅผ ๋ณผ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ๋๋๋ค.
isAdult(MAX_AGE) // ๊ทธ๋ฌ๋ MAX_AGE๊ฐ ๋ปํ๋ ๊ฒ์ด ๊ทธ ์ต๋๊ฐ์ ํฌํจํ๋ ๊ฑด์ง ์๋์ง ์๊ธฐ ์ด๋ ต๋ค.
-
ํ์์ min๊ณผ max์ ๋ํ ๊ฐ๋ ์ ์๋ฅผ ํจ๊ป ํ๊ณ ์ปจ๋ฒค์ ์ ์ ํด๋์ด์ผ ํ๋ค.
min, max
๋ ๊ฐ๊ฐ ๊ฒฝ์ฐ์ ๋ฐ๋ผ๋ฏธ๋ง, ์ด๊ณผ
๋๋์ดํ, ์ด์
๋ ์ค์ ํ๋๋ก ํด์๋ ์ ์๋๋ฐ, ์์๋ ํ์์ ํ ๊ฐ์ง๋ก ์ ํ๊ณ ๊ทธ ์ปจ๋ฒค์ ์ ๋ฐ๋ผ์ผ ํ๋ค.- ๋๋ ์์ ๋ค์ด๋ฐ์ ํ ๋,
MIN_NUMBER_LIMIT
๋MIN_NUMBER_LIMIT
์ฒ๋ผ LIMIT๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด, ๊ทธ ๋ค์ด๋ฐ์ผ๋ก๋ถํฐ ๊ทธ ์์๊ฐ ๊ทธ ๊ฐ์ ํฌํจํ์ง ์๋ ๊ทธ ๊ฐ์๋ฏธ๋ง, ์ด๊ณผ
๋ฅผ ์ง์นญํจ์ ์ ์ ์๋ค. (๊ทธ๋ผ์๋ ํท๊ฐ๋ฆด ์ ์์ผ๋ฏ๋ก ํ ๋ด์์ ์ปจ๋ฒค์ ์ ์ ํ๋ ๊ฒ์ด ์ข๋ค)
- ๋ช ์์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ์์์ ์ผ๋ก ๋ ธ๋ ฅํ์.
2) begin-end
- begin์์ ๊ฒฝ๊ณ๋ ํฌํจ๋๊ณ end์์๋ ๊ฒฝ๊ณ๊ฐ ํฌํจ๋์ง ์๋ ์๋ฌต์ ์ธ ๊ท์น์ด ์๋ค.
- ์๋ฅผ ๋ค์ด, ์์ด๋น์ค๋น ์ฌ์ดํธ์์๋ ์ฒดํฌ์ธ ๋ ์ง(begin)๋ ํฌํจ๋๊ณ ์ฒดํฌ์์ ๋ ์ง(end)๋ ํฌํจ๋์ง ์๋๋ค. ์์ค์ ์๋ง์ ๋ฐ์ดํฐ ํผ์ปค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด์ ๊ฐ์ด begin๊ณผ end๋ฅผ ๊ตฌ๋ถํ๋ค.
function reservationDate(beginDate, endDate) {
// some code...
}
reservationDate("2021-12-10", "2021-12-12")
// ์์ ๊ฐ์ ๊ฒฝ์ฐ ์์ฝ์ผ์๋ 2021-12-10๊ณผ 2021-12-11์ ํฌํจํ ๊ฒ์ ์์ํ ์ ์๋ค.
3) first-last
first-last
๋begin-end
์ ๋ฌ๋ฆฌ ์ ๋์ ๊ฒฝ๊ณ๋ฅผ ํฌํจํ๋ค.(~๋ถํฐ ~๊น์ง)
range((first = 1), (last = 4))
// 1,2,3,4๊ฐ ๋ค ํฌํจ๋๋ค.
4) prefix-suffix
- ๋ค์ด๋ฐ ์ prefix์ suffix๋ฅผ ์ผ๋ํ๋ฉด ์ข๋ค.
-
prefix
- prefix(์ ๋์ฌ)๋ ๋ช ์ฌ์ ์์ ๋ถ๋๋ค.
-
์๋ฐ์คํฌ๋ฆฝํธ์ getter์ setter๋ฅผ ์๋ก ๋ค ์ ์๋ค.
set
๊ณผget
์ด๋ผ๋ ์์ฝ์ด๋ฅผ ๋ฉ์๋ ์์ ๋ถ์ฌ์ค๋ค.
- React์์๋
use
์ ๋์ฌ๊ฐ ์๋๋ฐ, ์ด๋ ๊ฒ ๋ค์ด๋ฐ๋ ๋ฉ์๋๋ Hook์ผ๋ก ์ฝ์๋์ด ์์์ ์ ์ ์๋ค. - jQuery์์๋
$
๋ฅผ ์ ๋์ฌ๋ก ์ฐ๋ ์ฝ์์ด ์๋ค. - ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ES2019๋ถํฐ ํด์ฌย
#
ย prefix ๋ฅผ ์ถ๊ฐํด private class ํ๋๋ฅผ ์ ์ธํ ์ ์๊ฒ ๋์๋ค. - ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด์ ์์ prefix๋ฅผ ์ดํด๋ณด์๋ฉด, Loadsh ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ทผํ ๋ underscore(
_
) ๋ฅผ ์ด์ฉํจ์ ์ ์ ์๋ค.
-
suffix
- suffix(์ ๋ฏธ์ฌ)๋ ๋ช ์ฌ์ ๋ค์ ๋ถ๋๋ค.
- suffix๋ฅผ ํตํด, ์ํ๋ฅผ ํํํ ์ ์๋ค.
const CHECKOUT_REQUEST = "CHECKOUT_REQUEST"
const CHECKOUT_SUCCESS = "CHECKOUT_SUCCESS"
const CHECKOUT_FAILURE = "CHECKOUT_FAILURE"
- ์ฝ๋๋ฅผ ์งค ๋, ์ด์ ๊ฐ์ด prefix์ suffix๋ฅผ ํ์ฉํ์ฌ ์ค์ค๋ก ๊ท์น์ ๋ง๋ค๊ณ ํ๊ณผ ํจ๊ป ๊ณต์ ํ๋ฉฐ ์ผ๊ด๋ ๋ค์ด๋ฐ์ ํ๋ ๊ฒ์ด ์ข๋ค.
5) ๋งค๊ฐ๋ณ์์ ์์๊ฐ ๊ฒฝ๊ณ๋ค
- ํธ์ถํ๋ ํจ์์ ๋ค์ด๋ฐ๊ณผ ์ธ์์ ์์๊ฐ์ ์ฐ๊ด์ฑ์ ๊ณ ๋ คํ๋ค.
- ๋งค๊ฐ๋ณ์๋ 2๊ฐ๊ฐ ๋์ง ์๋๋ก ๋ง๋ ๋ค.
- ๋ถ๊ท์น์ ์ธ ๋งค๊ฐ๋ณ์๊ฐ ๋ค์ด์จ๋ค๋ฉด, arguments๋ rest parameter ์ฌ์ฉ์ ๊ณ ๋ คํ๋ค.
- ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ฒด์ ๋ด์์ ๋๊ธด๋ค. ๊ฐ์ฒด๋ก ๋ด๊ธด ๋งค๊ฐ๋ณ์๋ผ๋ฉด ์์๋ ์๊ด์ด ์๊ฒ ๋๋ค.
- ์ด๋ฏธ ๋ง๋ ํจ์๊ฐ ์๊ณ ์ด๋ฅผ ๊ณ ์น๊ธฐ ์ด๋ ต๋ค๋ฉด, Wrappingํ๋ ํจ์๋ฅผ ํ๋ ๋ง๋ ๋ค.
function someFunc(someArg1, someArg2, someArg3, someArg4) {}
function getFunc(someArg1, someArg3) {
someFunc(someArg1, undefined, someArg3)
}
// ๊ทธ ํจ์๋ฅผ ๋ ํธ์ถํ๋ ํํ์ ์ ํจ์๋ฅผ ๋ง๋ค์ด์ 2๊ฐ ์ดํ์ ๋งค๊ฐ๋ณ์๋ง ๋ฐ๋๋ค.
7. ์ผํญ์ฐ์ฐ์ ๋ค๋ฃจ๊ธฐ
-
์ผํญ์ฐ์ฐ์๋ 3๊ฐ์ ํผ์ฐ์ฐ์๋ฅผ ์ทจํ๋ค.
- ์กฐ๊ฑด ? ์ฐธ(๊ฐ ๋๋ ์) : ๊ฑฐ์ง(๊ฐ ๋๋ ์)
์ผํญ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋ ๋ช ํํ ๊ธฐ์ค์ ์ํ ์ผ๊ด์ฑ์ด ์์ด์ผ ํ๋ค
- ์ผํญ์ฐ์ฐ์๋ฅผ ์ค์ฒฉํด์ ๋ง์ด ์ฐ๋ฉด ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค. ๋ถ๊ธฐ์กฐ๊ฑด์ด ๋ง๋ค๋ฉด ์ฐจ๋ผ๋ฆฌ switch ๋ฌธ์ ์ฐ๋ ๊ฒ์ด ๋์ ์ ์๋ค
// ์ผํญ์ฐ์ฐ์ ์ฌ์ฉ bad case
function example() {
return condition1
? value1
: condition2
? value2
: condition3
? value3
: value4
}
// ์ ํจ์์ ๋์ผํ ๋ก์ง์ผ๋ก if๋ฌธ ๋ฆฌํฉํ ๋งํ์ผ๋, ์ด๊ฒ๋ ๊ณผ๋ํ๋ค.
function example() {
if (condition1) {
return value1
} else if (condition2) {
return value2
} else if (condition3) {
return value3
} else {
return value4
}
}
// ๋ถ๊ธฐ๊ฐ ๋ง์ผ๋ฉด switch๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ซ๋ค.
function example() {
switch (condition) {
case case1:
return value1
case case2:
return value2
case case3:
return value3
default:
return value4
}
}
- ์ผํญ์ฐ์ฐ์๋ฅผ ์ค์ฒฉํด ์ด๋ค๋ฉด ์ฐ์ ์์๋ฅผ ๋ช ํํ ์ ์ ์๋๋ก ์๊ดํธ ๊ฐ์ธ๊ธฐ
const example = condition1 ? (a === 0 ? "zero" : "positive") : "negative"
- ์ผํญ์ฐ์ฐ์ ์ฌ์ฉ์ ํตํด null ๊ฐ์ด ๋์ฌ ์ ์๋ ์ํฉ์ ๋์ํ ์ ์๋ค
const welcomeMessage = isLogin => {
const name = isLogin ? getName() : "์ด๋ฆ์์" // null ๊ฐ ๋์ ์ '์ด๋ฆ์์' ๋ฐํ
return `์๋
ํ์ธ์ ${name}`
}
- ์ผํญ์ฐ์ฐ์์ ๊ฐ์ด ๋ฐํ๋์ง ์๋(void) ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ต์ง ์์ฝ๋ฉ์ ๋ถ๊ณผํ ์ ์๋ค. ์ฐจ๋ผ๋ฆฌ if๋ฌธ ์ฌ์ฉํ๋ ํธ์ด ๋ซ๋ค
// ์ผํญ์ฐ์ฐ์ ์ฌ์ฉ bad case
// alert()๋ ๊ฐ์ ๋ฐํํ์ง ์๋๋ค.
function alertMessage(isAdult) {
isAdult ? alert("์
์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค") : alert("์
์ฅ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค")
}
// ์ด๋ฐ ๊ฒฝ์ฐ ์ผํญ์ฐ์ฐ์ ๋์ if๋ฌธ์ผ๋ก ๋ฆฌํฉํ ๋ง์ด ์ ์ ํ๋ค.
function alertMessage(isAdult) {
if (isAdult) {
alert("์
์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค")
} else {
alert("์
์ฅ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค")
}
}
- ์ผํญ์ฐ์ฐ์๋ ์ผํญ์ฐ์ฐ์๋ฅผ ํตํด ๊ฐ์ ๋ง๋ค๊ณ ๊ทธ ๊ฐ์ ๋ณ์๋ก ๋ด์๋ผ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ ํ๋ค
// ์ผํญ์ฐ์ฐ์ ์ฌ์ฉ Good Case1
// ์ผํญ์ฐ์ฐ์๋ฅผ ํตํด ๊ฐ์ ๋ง๋ค๊ณ ๊ทธ ๊ฐ์ ๋ณ์๋ก ๋ด์๋ด๋ ๊ฒฝ์ฐ
function alertMessage(isAdult) {
const isAdult ? '์
์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค' : '์
์ฅ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค';
if (isAdult) {
// some logic
}
if (isAdult && gender === 'MAN') {
// some logic
}
}
- ์ผํญ์ฐ์ฐ์๋ ์ผํญ์ฐ์ฐ์๊ฐ ๋ฐํํ๋ ๊ฐ์ ๋ฐ๋ก returnํ ๋ ์ฌ์ฉํ๋ ๊ฒ์ด ์ ์ ํ๋ค
// ์ผํญ์ฐ์ฐ์ ์ฌ์ฉ Good Case2
// ์ผํญ์ฐ์ฐ์๊ฐ ๋ฐํํ๋ ๊ฐ์ ๋ฐ๋ก returnํ๋ ๊ฒฝ์ฐ
function alertMessage(isAdult) {
return isAdult ? "์
์ฅ์ด ๊ฐ๋ฅํฉ๋๋ค" : "์
์ฅ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค"
}
- ์ผํญ์ฐ์ฐ์๋ ์ฐธ ๊ฐ ๋๋ ๊ฑฐ์ง ๊ฐ ๋ฐํ๋ง ํ์ํ ๊ฒฝ์ฐ์๋ ์ฌ์ฉ์ด ์ ์ ํ์ง ์๋ค.(๋์ truthy falsy ์ฌ์ฉ)
8. truthy-falsy์ ๋จ์ถํ๊ฐ ๋ค๋ฃจ๊ธฐ
1) truthy, falsy
-
falsy ๊ฑฐ์ง ๊ฐ์ ๊ฐ(8๊ฐ)
- false
- 0 (์ซ์ zero)
- -0 (์์ zero)
- 0n (BigInt)
- "" (๋น ๋ฌธ์์ด)
- null
- undefined
- NaN
-
truthy ์ฐธ ๊ฐ์ ๊ฐ
- ๊ฑฐ์ง ๊ฐ์ ๊ฐ(8๊ฐ)์ผ๋ก ์ ์๋ ๊ฐ์ด ์๋๋ฉด ๋ชจ๋ ์ฐธ ๊ฐ์ ๊ฐ์ผ๋ก ํ๊ฐ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ถ๋ฆฌ์ธ ๋ฌธ๋งฅ์์ ํ ๋ณํ์ด ๋๋ฏ๋ก, ์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์
์ฐธ ๊ฐ์ ๊ฐ
์ true๋ก ๋ณํํ๋ค.
// ๋ชจ๋ true ์กฐ๊ฑด์ผ๋ก์ if ๋ธ๋ก ์คํ๋๋ค.
if (true)
if ({}) // ๋น ๋ฐฐ์ด์ด๋ ๋น ๊ฐ์ฒด๋ ๋ชจ๋ true์ด๋ค.
if ([])
if (42)
if ("0") // string "0"์ true์ด๋ค.
if ("false")
if (new Date())
if (-42)
if (12n)
if (3.14)
if (-3.14)
if (Infinity)
if (-Infinity)
falsy ํ์ฉ ์
if (name === undefined || name === null) {
return "์ฌ๋์ด ์๋ค์"
}
- ์์ ๊ฐ์ด undefined๋ null์ ๊ฒฝ์ฐ๋ฅผ ๊ฑฐ๋ฅด๊ธฐ ์ํ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ์ด falsy๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ๋ฆฌํฉํ ๋ง ํ ์ ์๋ค.
if (!name) {
// falsy์ null๊ณผ undefined ํฌํจ๋๋ค.
return "์ฌ๋์ด ์๋ค์"
}
2) ๋จ์ถ ํ๊ฐ
- ๋จ์ถํ๊ฐ(short-circuit evalution) : ์ขํญ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์์ฐจ์ ์ผ๋ก ์ฒดํฌํ๋ค.
AND ์ฐ์ฐ์
- AND ์ฐ์ฐ์๋ ์ต์ฐํญ์ผ๋ก ๊ฐ๊ธฐ ์ ๊น์ง ๋ชจ๋ true์ฌ์ผ ์ต์ฐํญ์ผ๋ก ๋๋ฌํด์ ์ต์ฐํญ์ ๋ฐํํ๋ค.
console.log(true && true && "๋๋ฌ O") // '๋๋ฌ O'
- AND ์ฐ์ฐ์๋ ์ขํญ๋ถํฐ ์ฐํญ์ผ๋ก ์์ฐจ์ ์ผ๋ก ํ๊ฐํ๋ฉด์ falsy ํ์ธํ ์ฆ์ ๊ทธ falsy์ ๊ฐ์ ๋ฐํ๋๋ค.
console.log(true && undefined && false && null && "๋๋ฌ X") // undefined
OR ์ฐ์ฐ์
- OR ์ฐ์ฐ์๋ ์ต์ฐํญ์ผ๋ก ๊ฐ๊ธฐ ์ ๊น์ง ๋ชจ๋ false์ฌ์ผ ์ต์ฐํญ์ผ๋ก ๋๋ฌํด์ ์ต์ฐํญ์ ๋ฐํํ๋ค.
console.log(false || false || "๋๋ฌ O") // '๋๋ฌ O'
- OR ์ฐ์ฐ์๋ ์ขํญ๋ถํฐ ์ฐํญ์ผ๋ก ์์ฐจ์ ์ผ๋ก ํ๊ฐํ๋ฉด์ truthy๋ฅผ ํ์ธํ ์ฆ์ ๊ทธ truthy์ธ ๊ฐ์ ๋ฐํ๋๋ค.
console.log(false || "๊ฐ1" || "๊ฐ2" || "๋๋ฌ X") // ๊ฐ1
๋ฆฌํฉํ ๋ง ์์ 1
- ๋จ์ถ ํ๊ฐ๋ ๊ธฐ๋ณธ๊ฐ ํํ ์์ ๊ฐ์ฅ ์ ์ฉํ๋ค.
// ์ด๋ฌํ ์ผ์ด์ค๋ฅผ
function fetchData() {
if (state.data) {
return state.data
} else {
return "Fetching..."
}
}
- ์์ ๊ฐ์ ์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ๋จ์ถํ๊ฐ๋ฅผ ํ์ฉํ์ฌ ๋ฆฌํฉํ ๋ง
function fetchData() {
return state.data || "Fetching"
// state.data๊ฐ ์กด์ฌ(truthy)ํ๋ฉด state.data๊ฐ ๋ฐํ๋๊ณ , ์กด์ฌํ์ง ์์ผ๋ฉด(falsy) ์ต์ฐํญ์ 'Fetching'์ ๋ฐํํ๋ค.
}
๋ฆฌํฉํ ๋ง ์์ 2
function favoriteDog(someDog) {
let favoriteDog
if (someDog) {
favoriteDog = someDog
} else {
favoriteDog = "๋์น"
}
return favoriteDog + "์
๋๋ค"
}
console.log(favoriteDog()) // '๋์น์
๋๋ค'
console.log(favoriteDog("ํฌ๋ฉ")) // 'ํฌ๋ฉ์
๋๋ค'
- ์์ ๊ฐ์ ์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ๋จ์ถํ๊ฐ๋ฅผ ํ์ฉํ์ฌ ๋ฆฌํฉํ ๋ง
function favoriteDog(someDog) {
return (someDog || "๋์น") + "์
๋๋ค"
}
console.log(favoriteDog()) // '๋์น์
๋๋ค'
console.log(favoriteDog("ํฌ๋ฉ")) // 'ํฌ๋ฉ์
๋๋ค'
๋ฆฌํฉํ ๋ง ์์ 3
function getActiveUserName(user, isLogin) {
if (isLogin) {
if (user) {
if (user.name) {
return user.name
} else {
return "์ด๋ฆ์์"
}
}
}
}
- ์์ ๊ฐ์ ์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ๋จ์ถํ๊ฐ๋ฅผ ํ์ฉํ์ฌ ๋ฆฌํฉํ ๋ง
function getActiveUserName(user, isLogin) {
if (isLogin && user) {
return user.name || "์ด๋ฆ์์"
}
}
9. Else if์ Else๋ฅผ ํผํ๊ณ Early Returnํ์
1) else if ํผํ๊ธฐ
-
else if๋ฌธ์ด ๋ง์น ํ์ดํ๋ผ์ธ์ฒ๋ผ ์์ if๋ฌธ๊ณผ ์ฐ๊ฒฐ๋์ด ์ฐจ๋ก๋๋ก ์คํ๋๋ค๊ณ ์๊ฐํ๋ฉด ์ ๋๋ค.
- else if๋ฌธ์ else๋ฌธ ์ฒ๋ฆฌ๊ฐ ํ ๋ฒ ๋๊ณ if๋ฌธ ๋์์ด ๋๋ ๊ฒ๊ณผ ๊ฐ๋ค.
const x = 1
if (x >= 0) {
console.log("x๋ 0๊ณผ ๊ฐ๊ฑฐ๋ ํฌ๋ค")
} else if (x > 0) {
console.log("x๋ 0๋ณด๋ค ํฌ๋ค")
}
// 'x๋ 0๊ณผ ๊ฐ๊ฑฐ๋ ํฌ๋ค'
- ์ ์ฝ๋์ ์๋์ ์ฝ๋๋ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ฐ์ผ๋ฉฐ, ๊ฒฐ๊ณผ๋ ๊ฐ๋ค.
const x = 1
if (x >= 0) {
console.log("x๋ 0๊ณผ ๊ฐ๊ฑฐ๋ ํฌ๋ค")
} else {
if (x > 0) {
console.log("x๋ 0๋ณด๋ค ํฌ๋ค")
}
}
// 'x๋ 0๊ณผ ๊ฐ๊ฑฐ๋ ํฌ๋ค'
- else if๋ฅผ ์์ ์ฐ์ง ๋ง๊ณ , ์๋ ์ฝ๋์ฒ๋ผ ์ if๋ฌธ์ ์จ์ ์กฐ๊ฑด์ ๋ถ๋ฆฌํ๋ ํธ์ด ๋ช ํํ๋ค
const x = 1
if (x >= 0) {
console.log("x๋ 0๊ณผ ๊ฐ๊ฑฐ๋ ํฌ๋ค")
}
if (x > 0) {
console.log("x๋ 0๋ณด๋ค ํฌ๋ค")
}
// 'x๋ 0๊ณผ ๊ฐ๊ฑฐ๋ ํฌ๋ค'
// 'x๋ 0๋ณด๋ค ํฌ๋ค'
- ์กฐ๊ฑด์ด ๋ง์์ else if๊ฐ ๋์ด๋์ผ ํ ๊ฒฝ์ฐ switch๋ฌธ์ผ๋ก ๋์ฒดํ๋ ๊ฒ์ด ๋ซ๋ค
2) else ํผํ๊ธฐ
- else๋ฅผ ์ฐ์ง ์์๋ ์กฐ๊ฑด์ด ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ถ๊ธฐ๋๋ค.
function getActiveUserName(user) {
if (user.name) {
return user.name
} else {
return "์ด๋ฆ์์"
}
}
- ์ ์ฝ๋๋ ์๋ ์ฝ๋์ฒ๋ผ ๋ฆฌํฉํ ๋งํ๋ ๊ฒ์ด ์ ์ ํ๋ค.
function getActiveUserName(user) {
if (user.name) {
return user.name
}
return "์ด๋ฆ์์"
}
-
else๋ฅผ ์ฐ์ง ์์์ผ ํ๋ ์ด์ ๋ ์คํ์ผ์์ ๋ฌธ์ ๋ฟ๋ง ์๋๋ผ, ๋ฐ์ ๋ ๋ก์ง์ ์์ฑํ๊ฒ ๋๋ ๋ ผ๋ฆฌ์ ์ํ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ๋์ ํจ์๊ฐ ๋ ๊ฐ์ง ์ด์์ ๊ธฐ๋ฅ์ ํ ๋ else๋ฅผ ๋ฌด๋ถ๋ณํ๊ฒ ์ฌ์ฉํ๋ฉด, ์ด๋ฐ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์๋ค.
// age๊ฐ 20 ๋ฏธ๋ง์ report๋ผ๋ ํน์ ํจ์๋ฅผ ์คํํ๋ฉฐ, ์๋์๊ฒ ์ธ์ฌ๋ฅผ ํ๋ ๋ก์ง์ ์์ฑํ๋ ค๊ณ ํ๋ค.
function getHelloCustomer() {
if (user.age < 20) {
report(user)
} else {
return "์๋
ํ์ธ์"
}
}
// ์ด ์ฝ๋์์๋ else ๋๋ฌธ์, 20์ธ ๋ฏธ๋ง์๊ฒ๋ง ์ธ์ฌ๋ฅผ ํ์ง ์๋ ์๋ํ์ง ์์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ๋ค.
- ์๋ ์ฝ๋์ฒ๋ผ else๋ฌธ์ ์์ ๋ฉด, ๋ ๊ธฐ๋ฅ(๋ฏธ์ฑ๋ ์ ํ์ธํ์ฌ ์ ๊ณ , ์๋์๊ฒ ์ธ์ฌ)์ด ๋ถ๋ฆฌ๋์ด ์๋์ ๋์ด์ ๊ด๊ณ์์ด ์ธ์ฌํ๋ ๊ธฐ๋ฅ์ด ์คํ๋๋ค. ์๋ ์ฝ๋์ฒ๋ผ ๋ฆฌํฉํ ๋ง ํ๋ ๊ฒ์ด ์ ์ ํ๋ค.
function getHelloCustomer() {
if (user.age < 20) {
report(user)
}
return "์๋
ํ์ธ์"
}
3) Early Return
Early Return ์ค๋ช
-
Early Return์ด๋ ์กฐ๊ฑด๋ฌธ์์ ๋จผ์ Returnํ ์ ์๋ ๋ถ๋ถ์ ๋ถ๋ฆฌํ์ฌ ์ฐ์ if๋ฌธ ๋ด์์ Returnํ์ฌ ํจ์๋ฅผ ๋ฏธ๋ฆฌ ์ข ๋ฃํ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ค์ ์ฝ๋๋ก ์ง์ ํ์ง ์์ else๋ฌธ์ ์ฌ์ฉํ์ง ์์๋ ๋๋ค.
- if-else๋ฌธ์ด ๋๋ฌด ๋ง์ผ๋ฉด ์ฝ๊ธฐ๊ฐ ์ด๋ ต๊ณ ์กฐ๊ฑด์ ๋ํด ๋ช ์์ ์ด์ง ์์ ์ ์๋๋ฐ, ์ด๋ด ๋ Early Return์ ํ์ฉํ์ฌ ๋ฆฌํฉํ ๋งํ ์ ์๋ค.
- Early Return์ผ๋ก ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ฉด ๋ก์ง์ ๋ณํจ์ด ์์ผ๋ฉด์ ๊ฐ๋ ์ฑ์ด ์ข๊ณ ๋ ๋ช ์์ ์ธ ์ฝ๋๋ก ๋ฆฌํฉํ ๋ง ํ ์ ์๋ค.
- ์ต์์์ Early Return์ ํตํด ๊ฑฐ๋ฅด๋ ๋ก์ง์ ๋ฃ์ผ๋ฉด ์กฐ๊ฑด๋ฌธ ํ์ธ ์ ๋ ํท๊ฐ๋ฆฐ๋ค.
Early Return ์์ 1
function loginService(isLogin, user) {
// 1. ๋ก๊ทธ์ธ ์ฌ๋ถ ํ์ธ
if (!isLogin) {
// 2. ํ ํฐ ์กด์ฌ ํ์ธ
if (checkToken()) {
// 3. ๊ฐ์
์ฌ๋ถ ์ฌํ์ธ
if (!user.nickName) {
return registerUser(user)
} else {
refreshToken()
return "๋ก๊ทธ์ธ ์ฑ๊ณต"
}
} else {
throw new Error("No Token")
}
}
}
- ์์ ๊ฐ์ ์ฝ๋๋ฅผ ์๋์ฒ๋ผ Early Return์ผ๋ก ๋ฆฌํฉํ ๋งํ ์ ์๋ค.
function loginService(isLogin, user) {
// 1. ๋ก๊ทธ์ธ ์ฌ๋ถ ํ์ธ
if (isLogin) {
return
}
// 2. ํ ํฐ ์กด์ฌ ํ์ธ
if (!checkToken()) {
throw new Error("No Token")
}
// 3. ๊ฐ์
์ฌ๋ถ ์ฌํ์ธ
if (!user.nickName) {
return registerUser(user)
}
refreshToken()
return "๋ก๊ทธ์ธ ์ฑ๊ณต"
}
Early Return ์์ 2
function ์ค๋ํ๋ฃจ(condition, weather, isJob) {
if (condition === "GOOD") {
๊ณต๋ถ()
๊ฒ์()
์ ํ๋ธ๋ณด๊ธฐ()
if (weather === "GOOD") {
์ด๋()
๋นจ๋()
}
if (isJob === "GOOD") {
์ผ๊ฐ์
๋ฌด()
์กฐ๊ธฐ์ทจ์ง()
}
}
}
์์ ๊ฐ์ ์ฝ๋๋ฅผ ์๋์ฒ๋ผ Early Return์ผ๋ก ๋ฆฌํฉํ ๋งํ ์ ์๋ค.
function ์ค๋ํ๋ฃจ(condition, weather, isJob) {
if (condition !== "GOOD") {
return
}
๊ณต๋ถ()
๊ฒ์()
์ ํ๋ธ๋ณด๊ธฐ()
if (weather !== "GOOD") {
์ด๋()
๋นจ๋()
}
if (isJob === "GOOD") {
์ผ๊ฐ์
๋ฌด()
์กฐ๊ธฐ์ทจ์ง()
}
}
10. ๋ถ์ ์กฐ๊ฑด๋ฌธ ์ง์ํ๊ธฐ
๋ถ์ ์กฐ๊ฑด๋ฌธ์ด ์ข์ง ์์ ์ด์
1. ๋ถ์ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ๋ฉด ์๊ฐ์ ์ฌ๋ฌ ๋ฒ ํด์ผ ํ ์ ์๋ค
if (!isNaN(3)) {
console.log("์ซ์์
๋๋ค")
}
// ์ซ์์
๋๋ค.
- ์์ ๊ฐ์ ๋ถ์ ์กฐ๊ฑด๋ฌธ(isNaN)์ด ์ฌ์ฉ๋ ์ฝ๋๋ ์ฌ๋ฌ ๋ฒ ์๊ฐํด์ผ ํด์ ์ค์ํ ์ ์๊ธฐ ๋๋ฌธ์, ์๋์ ๊ฐ์ด ๋ช ์์ ์ธ ๊ธ์ ์กฐ๊ฑด๋ฌธ(isNumber - ์ปค์คํ ํจ์) ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ํธ์ด ์ข๋ค.
function isNumber(num) {
return !Number.isNaN(num) && typeof num === "number"
}
if (isNumber(3)) {
console.log("์ซ์์
๋๋ค")
}
// ์ซ์์
๋๋ค.
2. ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์์ฒด๊ฐ if๋ฌธ์ด ์ฒ์์ ์ค๊ณ true๋ถํฐ ์คํ์ํค๋๋ฐ, ๋ถ์ ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํ๋ฉด false์กฐ๊ฑด์ ๊ฐ์ ๋ฐํํ๊ธฐ ์ํด ๋ถํ์ํ๊ฒ else๋ฌธ๊น์ง ์จ์ผ ํ ์ ์๋ค
const isCondition = true
const isNotCondition = false
if (isCondition) {
console.log("์ฐธ์ธ ๊ฒฝ์ฐ์๋ง ์คํ")
}
if (isNotCondition) {
console.log("์ฐธ์ธ ๊ฒฝ์ฐ์๋ง ์คํ")
} else {
console.log("๊ฑฐ์ง์ธ ๊ฒฝ์ฐ์๋ง ์คํ")
}
์ด๋ฌํ ์ด์ ๋ค ๋๋ฌธ์ ๋ถ์ ์กฐ๊ฑด๋ฌธ์ ๋ํ ์ฌ์ฉ์ ์ง์ํ๊ณ ๊ธ์ ์กฐ๊ฑด๋ฌธ ์ฌ์ฉ์ ์งํฅํ๋ ๋ฐฉํฅ์ด ์ข๋ค.
๋ถ์ ์กฐ๊ฑด๋ฌธ ์ฌ์ฉํ๋ ์์ธ ๊ฒฝ์ฐ
-
- Early Return์ ์ฌ์ฉํ ๋
-
- Form Validationํ ๋
-
- ๋ณด์ ๋๋ ๊ฒ์ฌํ๋ ๋ก์ง์์
11. ๋ช ์์ ์ธ ์ฝ๋ ์์ฑํ๊ธฐ(Default Case, ์ฐ์ฐ์)
1) Default Case ๊ณ ๋ คํ๊ธฐ
-
์ฌ์ฉ์์ ์ค์๋ฅผ ์๋ฐฉํ๊ธฐ ์ํด Default Case๋ฅผ ๊ณ ๋ คํ๋ ์์์ ์ธ ๋ ธ๋ ฅ์ด ํ์ํ๋ค
- ํจ์์์ ๋ค์ด์ค์ผ ํ ์ธ์๊ฐ ์ ๋ฌ๋์ง ์์ ๊ฒฝ์ฐ OR ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ ํ๊ฒ Default ๊ฐ์ ๋ฏธ๋ฆฌ ์ค์ ํด๋๋ ๋ฐฉ๋ฒ์ด ๊ถ์ฅ๋๋ค.
- ์์ 1
function sum(x, y) {
x = x || 0
y = y || 0
return x + y
}
console.log(sum()) // 0
- ์์ 2
function registerDay(userInputDay) {
switch (userInputDay) {
case "์์์ผ": // some code
case "ํ์์ผ": // some code
case "์์์ผ": // some code
case "๋ชฉ์์ผ": // some code
case "๊ธ์์ผ": // some code
case "ํ ์์ผ": // some code
case "์ผ์์ผ": // some code
default:
throw Error("์
๋ ฅ๊ฐ์ด ์ ํจํ์ง ์์ต๋๋ค")
}
}
registerDay("์ใน์์ผ") // ์ฌ์ฉ์์ ์
๋ ฅ ์ค์ ์ผ์ด์ค
// Error: ์
๋ ฅ๊ฐ์ด ์ ํจํ์ง ์์ต๋๋ค
-
์์ 3
- ์๋ฅผ ๋ค์ด,
parseInt()
ํจ์์์ ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์(radix)์ ๊ธฐ๋ณธ๊ฐ์ 10์ด ์๋๋ค. ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ 10์ง์ ์ ์๋ฅผ ๋ฐํํ๋ ค๋ ์๋๋ก ํด๋น ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์์ 10์ ์๋ตํ๋ ์๋ชป๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- ์๋ฅผ ๋ค์ด,
-
์ด๋ฌํ ์ฌ์ฉ์ ์ค์๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด, ์๋์ ๊ฐ์ด parseInt() ํจ์์์ radix ๋งค๊ฐ๋ณ์๋ฅผ ์๋ตํ ๊ฒฝ์ฐ ๊ธฐ๋ณธ๊ฐ์ 10์ง์๋ก ๊ฐ์ฃผํ๋ ์ปค์คํ ํจ์๋ฅผ ๋ง๋ค ์๋ ์๋ค.
function safeDecimalParseInt(number, radix) { return parseInt(number, radix || 10) }
2) ๋ช ์์ ์ธ ์ฐ์ฐ์ ์ฌ์ฉ ์งํฅํ๊ธฐ
-
๋ช ์์ ์ผ๋ก ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ์์ธก ๊ฐ๋ฅํ๊ณ ๋๋ฒ๊น ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
-
์ฐ์ ์์๊ฐ ๋จผ์ ์ธ ๋ถ๋ถ์ ์๊ดํธ๋ก ๋ฌถ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
;(x + y) * z
-
์ ์์ฐ์ฐ์๋ ํ์์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋๋๋ก ์ฐ์ฐ์๋ฅผ ๋ช ์์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
number-- // ์์ ๊ฐ์ ํ์์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์๋์ฒ๋ผ ๋ช ์์ ์ธ ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. number = number - 1
-
12. Null ๋ณํฉ ์ฐ์ฐ์(??)
Null ๋ณํฉ ์ฐ์ฐ์ ์ ์
-
Nullish coalescing operator(Null ๋ณํฉ ์ฐ์ฐ์)
Null ๋ณํฉ ์ฐ์ฐ์ ํ์์ฑ
- OR ์ฐ์ฐ์๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ฌ์ฉํ๊ฑฐ๋ ๋จ์ถ ํ๊ฐํ๊ณ ์ถ์ ๊ฒฝ์ฐ์
falsy
๊ฐ ๋๋ฌธ์ ์๋์น ์์ ๊ฒฐ๊ณผ๊ฐ ์๊ธธ ์ ์๋ค. - OR ์ฐ์ฐ์๋ ์ผ์ชฝ ํผ์ฐ์ฐ์๊ฐ
falsy
๊ฐ์ผ ๋ ์ค๋ฅธ์ชฝ ํผ์ฐ์ฐ์๋ฅผ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด ์ผ์ชฝ ํผ์ฐ์ฐ์๋ฅผ ๋ฐํํ๋ค. ๊ทธ๋ฐ๋ฐ ์ซ์ 0๋ falsy๊ฐ์ด๊ธฐ ๋๋ฌธ์, ์๋ ์ฝ๋์ฒ๋ผ 0์ ๋ฐํํ๊ณ ์ถ์ ์๋์ ๋ฌ๋ฆฌ ์ค๋ฅธ์ชฝ ํผ์ฐ์ฐ์๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
0 || 10 // 10
-
์ด๋ฐ ๊ฒฝ์ฐ์ ๋์์ผ๋ก ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ด null ๋ณํฉ ์ฐ์ฐ์(
??
)๋ค.- null ๋ณํฉ ์ฐ์ฐ์๋ null๊ณผ undefined๋ฅผ ํ๊ฐํ ๋๋ง ์ฌ์ฉํ๋ฉด ๋๋ค.
0 ?? 10 // 0
null ?? 10 // 10
undefined ?? 10 // 10
์ฐธ๊ณ
- Null ๋ณํฉ ์ฐ์ฐ์๋ฅผ AND๋ OR ์ฐ์ฐ์์ ์ฒด์ด๋ํ์ฌ ์ฌ์ฉํ๋ ๊ฒ์ ์ ์ ํ์ง ์๋ค.
- Null ๋ณํฉ ์ฐ์ฐ์๋ฅผ ์ต์ ๋ ์ฒด์ด๋ ์ฐ์ฐ์์ ํจ๊ป ์ฌ์ฉํ๋ฉด ๊ถํฉ์ด ์ข๋ค.
13. ๋๋ชจ๋ฅด๊ฐ์ ๋ฒ์น์ผ๋ก ์กฐ๊ฑด๋ฌธ์ ๊ฐ๋จํ๊ฒ
๋๋ชจ๋ฅด๊ฐ์ ๋ฒ์น
const isValidUser = true
const isValidToken = true
if (isValidToken && isValidUser) {
console.log("๋ก๊ทธ์ธ ์ฑ๊ณต")
}
- ์๋ฅผ ๋ค์ด ์์ ๊ฐ์ด ๋ก๊ทธ์ธ ์ฑ๊ณต ํ์ธํ๋ ์กฐ๊ฑด๋ฌธ์ด ์๋๋ฐ, ๋ก๊ทธ์ธ ์คํจ ์ผ์ด์ค๋ฅผ ์ถ๊ฐ๋ก ๋ง๋ ๋ค๊ณ ํ๋ฉด, ๊ธฐ์กด์ ์์๊ฐ์ ํ์ฉํ์ฌ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
if (!(isValidToken && isValidUser)) {
console.log("๋ก๊ทธ์ธ ์คํจ")
}
-
!(isValidToken && isValidUser)
๋ค์ ์ถ๊ฐ ์ฐ์ฐ์ด ๋ ๋ถ๊ฒ ๋๋ค๋ฉด ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๊ณ ์ ์ง๋ณด์๊ฐ ์ด๋ ค์ธ ์ ์๋ค.- ๋ฐ๋ผ์ ํด๋น ์ฐ์ฐ์ ์๊ดํธ๋ฅผ ํ ๊บผํ ๋ฒ๊ธฐ๋ ๊ฒ์ด ์ข์ ์ ์๋๋ฐ, ์ด๋ฅผ ์ํด ๋๋ชจ๋ฅด๊ฐ์ ๋ฒ์น์ ํ์ฉํ์ฌ ์ด๋ ๊ฒ
!isValidToken || !isValidUser
๋ฆฌํฉํ ๋งํ ์ ์๋ค.
- ๋ฐ๋ผ์ ํด๋น ์ฐ์ฐ์ ์๊ดํธ๋ฅผ ํ ๊บผํ ๋ฒ๊ธฐ๋ ๊ฒ์ด ์ข์ ์ ์๋๋ฐ, ์ด๋ฅผ ์ํด ๋๋ชจ๋ฅด๊ฐ์ ๋ฒ์น์ ํ์ฉํ์ฌ ์ด๋ ๊ฒ
if (!isValidToken || !isValidUser) {
console.log("๋ก๊ทธ์ธ ์คํจ")
}
- AND ๋ถ์
if (A && B) {
// ์ฑ๊ณต
}
์์ ๊ฐ์ ์ฝ๋์ ์กฐ๊ฑด์ ๋ถ์ ํ๋ฉด ์๋์ฒ๋ผ ๋๋ชจ๋ฅด๊ฐ ๋ฒ์น์ ์จ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
if (!A || !B) {
// ์คํจ
}
- OR ๋ถ์
if (A || B) {
// ์ฑ๊ณต
}
์์ ๊ฐ์ ์ฝ๋์ ์กฐ๊ฑด์ ๋ถ์ ํ๋ฉด ์๋์ฒ๋ผ ๋๋ชจ๋ฅด๊ฐ ๋ฒ์น์ ์จ์ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
if (!A && !B) {
// ์คํจ
}
14. JavaScript์ ๋ฐฐ์ด์ ๊ฐ์ฒด๋ค
const arr = [1, 2, 3]
arr[4] = "test"
arr["property"] = "string value"
arr["obj"] = {}
arr["{}"] = [1, 2, 3]
arr["func"] = function() {
return "hello"
}
- ์์ ๊ฐ์ด ๋ฐฐ์ด์ ๋ง์น ๊ฐ์ฒด์์ key์ value๋ฅผ ์ค์ ํ๋ฏ์ด ๊ฐ์ ์ ๋ ฅํ๋ฉด, ๊ฐ์ฒด์ฒ๋ผ ๊ฐ์ด ์ ๋ ฅ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
console.log(arr)
/* [
1,
2,
3,
<1 empty item>,
'test',
property: 'string value',
obj: {},
'{}': [ 1, 2, 3 ],
func: [Function (anonymous)]
] */
- ์ฌ์ง์ด ๋ฐฐ์ด ๋ด์ ํจ์๋ ๊ฐ์ฒด์ ๋ฉ์๋์ฒ๋ผ ์คํํ ์ ์๋ค.
console.log(arr.func()) // 'hello'
- ์ด๋ฐ ํน์ง์ ์ ์ดํดํ๊ณ ์์ด์ผ ํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ๋ฐฐ์ด ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ค๋ฉด
Array.isArray()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
if (Array.isArray(arr)) {
console.log("๋ฐฐ์ด ํ์ธ")
}
15. ๋ฐฐ์ด ์์์ ์ ๊ทผํ๊ธฐ
arr[0], arr[1]
์ฒ๋ผ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ๋ฐฐ์ด ์์์ ์ ๊ทผํ๋ ๊ฒ์ ํด๋น ์ธ๋ฑ์ค๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง ์๊ธฐ ์ด๋ ค์ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค.
const arr = [1, 2, 3]
console.log(arr[0], arr[1]) // 1 2
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, ๋ณ์ ์ ์ธ ๋ฐ ํ ๋น์ ๋ฐฐ์ด์ ๊ตฌ์กฐ๋ถํดํ ๋น์ ํ์ฌ ํด๋น ๋ฐฐ์ด ์์์ ์ญํ ์ ๋ช ์์ ์ผ๋ก ํํํ ์ ์๋ค.
const arr = [1, 2, 3]
const [firstInput, secondInput] = arr
console.log(firstInput, secondInput) // 1 2
- ๋๋, ํจ์์์ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ๋๋ถํฐ ๊ตฌ์กฐ๋ถํดํ ๋น์ ํ๋ ๋ฐฉ๋ฒ๋ ์๋ค.
const arr = [1, 2, 3]
function test([firstInput, secondInput], name) {
console.log(firstInput, secondInput, name) // 1 2 'Marco'
}
test(arr, "Marco")
- dom์์ ์๋ฆฌ๋จผํธ๋ฅผ ๊ฐ์ ธ์ฌ ๋ ๋ฐฐ์ด ํํ๋ก ๊ฐ์ง๊ณ ์ค๊ฒ ๋๋๋ฐ ์ด๋ฐ ๊ฒฝ์ฐ์๋ ์ ๋ฐฉ๋ฒ์ ํ์ฉํ๋ฉด ์ข๋ค.
function clickGroupButton() {
const confirmButton = document.getElementsByTagName("button")[0]
const cancelButton = document.getElementsByTagName("button")[1]
const resetButton = document.getElementsByTagName("button")[2]
}
// ์ ์ฝ๋์์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ๋ฐฐ์ด์์์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๊ตฌ์กฐ๋ถํดํ ๋น์ ํตํด ๋ฆฌํฉํ ๋ง
function clickGroupButton() {
const [
confirmButton,
cancelButton,
resetButton,
] = document.getElementsByTagName("button")
}
- ์ฌ์ง์ด ๋ฐฐ์ด์ ์์๊ฐ ํ๋๋ผ๊ณ ํ๋๋ผ๋ ๊ตฌ์กฐ๋ถํดํ ๋น์ ์จ์ ๋ฐฐ์ด ์์์ ๊ธฐ๋ฅ์ ๋ช ์์ ์ผ๋ก ํํํ๋ ๊ฒ์ด ์ข๋ค.
16. ๋ฐฐ์ด์ length์ ์ ์ฌ๋ฐฐ์ด๊ฐ์ฒด
1) Array.length
- Array.length๋ ๋ฐฐ์ด์ ๊ธธ์ด๋ณด๋ค๋
๋ฐฐ์ด์ ๋ง์ง๋ง ์ธ๋ฑ์ค
๋ฅผ ์๋ฏธํ๋ ๊ฒ์ ๊ฐ๊น๋ค.
const arr = [1, 2, 3]
console.log(arr.length) // 3
arr.length = 10
console.log(arr.length) // 10
console.log(arr) // [1,2,3, , , , , , , ,]
arr[15] = 4
console.log(arr) // [1,2,3, , , , , , , , , , , 4]
- ๋ฐฐ์ด์ ๊ธธ์ด๋ฅผ 0์ผ๋ก ์ค์ ํ๋ฉด ๋ฐฐ์ด์ด
์ด๊ธฐํ
๋๋ค.
const arr = [1, 2, 3]
arr.length = 0
console.log(arr) // []
- Array.length์ ์ด๋ฌํ ํน์ฑ์ ์ผ๋ํ๊ณ ์ฃผ์ํด์ ์ฌ์ฉํด์ผ ํ๋ค.
2) ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด
- ์ ์ฌ๋ฐฐ์ด๊ฐ์ฒด๋ ๋ง ๊ทธ๋๋ก โ๋ฐฐ์ดโ์ด ์๋ โ๊ฐ์ฒดโ์ด๋ค. ๊ทธ๋ฐ๋ฐ ์๋ ์ฝ๋์ฒ๋ผ, length ์์ฑ๊ณผ ์ธ๋ฑ์ฑ๋ ์์๋ฅผ ๊ฐ์ง
- ์ ์ฌ๋ฐฐ์ด๊ฐ์ฒด๋ฅผ
Array.from()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ธฐํ๊ฒ๋ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋๋ ๊ฒ์ ๋ณผ ์ ์๋ค. - ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด (
length
ย ์์ฑ๊ณผ ์ธ๋ฑ์ฑ ๋ ์์๋ฅผ ๊ฐ์ง ๊ฐ์ฒด)
const arrayLikeObject = {
0: "HELLO",
1: "WORLD",
length: 2,
}
console.log(Array.isArray(arrayLikeObject)) // false
const arr = Array.from(arrayLikeObject)
console.log(Array.isArray(arr)) // true
console.log(arr) // [ 'HELLO', 'WORLD' ]
- arguments๋ webAPI์ node list ๋ ์ ์ฌ๋ฐฐ์ด๊ฐ์ฒด๋ค.
-
์ ์ฌ๋ฐฐ์ด๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๊ณ ์ฐจํจ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
- Array.from() ๋ฉ์๋๋ฅผ ํตํด ๋ฐฐ์ด๋ก ๋ณํํด์ผ ๋ฐฐ์ด์ ๊ณ ์ฐจํจ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
17. ๋ถ๋ณ์ฑ๊ณผ ์์ ๋ณต์ฌ, ๊น์ ๋ณต์ฌ
๋ถ๋ณ์ฑ๊ณผ ์์ ๋ณต์ฌ, ๊น์ ๋ณต์ฌ
-
์๋์ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด, ์๋ณธ๋ฐฐ์ด๋ง ๋ณ๊ฒฝํ๋๋ฐ ์๋ณธ๋ฐฐ์ด์ ๋ณต์ฌํ๋ ์ ๋ฐฐ์ด๋ ํจ๊ป ๋ณ๊ฒฝ๋๋ ์ฌ์ค์ ํ์ธํ ์ ์๋ค.
- ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด๋ ์ด์ฒ๋ผ ๋ณํ ์ ์๋ค(mutable).
const originArray = ["123", "456", "789"]
const newArray = originArray
originArray.push(10)
originArray.push(11)
originArray.push(12)
originArray.unshift(0)
console.log(newArray) // [ 0, '123', '456', '789', 10, 11, 12 ]
-
๋ฐ๋ผ์ ๋ฐฐ์ด๊ณผ ๊ฐ์ฒด์์๋ ๋ถ๋ณ์ฑ(immutable)์ ์งํค๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ๋ค.
- ๋ฐฐ์ด์ ๋ณต์ฌํ๋ค.
- ์๋ก์ด ๋ฐฐ์ด์ ๋ฐํํ๋ ๋ฉ์๋๋ค์ ํ์ฉํ๋ค.
์์ ๋ณต์ฌ์ ๊น์ ๋ณต์ฌ
-
์์ ๋ณต์ฌ(shallow copy)๋?
๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ ๋ ์ฐธ์กฐ์ ์ํ ํ ๋น์ด ์ด๋ฃจ์ด์ง๋ฏ๋ก ์๋ณธ๊ณผ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๊ฐ๊ฒ ๋๊ณ ์ด๊ฒ์ด ์์ ๋ณต์ฌ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํ ๋ณ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ฉด ๋ค๋ฅธ ๋ณ์์ ๋ฐ์ดํฐ์ ๊ฐ๋ ํจ๊ป ๋ณ๊ฒฝ ๋๋ค. ์ฆ, ํ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ณ ์๋ ๊ฒ์ด๋ค. (์๋ณธ===์นดํผ -> true)
-
๊น์ ๋ณต์ฌ(deep copy)๋?
์ฐธ์กฐ๊ฐ ์๋ ๊ฐ์ ๊ทธ๋๋ก ๋ณต์ฌํ์ง๋ง, ๊ฐ์ ๊ฐ์ ๊ฐ์ง๋ ๋ณ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ํ ๊ฐ์ฒด ๊ฐ์ ๋ณ๊ฒฝ์ด ๋ค๋ฅธ ๊ฐ์ฒด ๊ฐ์ ๋ณ๊ฒฝ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค. (์๋ณธ===์นดํผ ->false)
์์๊ฐ๊ณผ ์ฐธ์กฐ๊ฐ์ ๋ณต์ฌ
์ ์ด๋ฏธ์ง์์ ํ์ธํ ์ ์๋ฏ์ด, ์์๊ฐ์ ๊น์ ๋ณต์ฌ
๋ฅผ ํ์ง๋ง ๊ฐ์ฒด๋ ์์ ๋ณต์ฌ
์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. ๋ฐ๋ผ์ ์ฐธ์กฐ๊ฐ์ธ ๊ฐ์ฒด๋ ๋ฐฐ์ด์ ๋ถ๋ณ์ฑ์ด ํ์ํ ๊ฒฝ์ฐ ๊น์ ๋ณต์ฌ์ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํด์ผ ํ๋ค.
๊ฐ์ฒด๋ฅผ ๊น์ ๋ณต์ฌ
ํ๋ ๋ฐฉ๋ฒ์ ํฌ๊ฒ 4๊ฐ์ง๊ฐ ์๋ค.
- spread(โฆ)
- Object.assign()
- JSON.parse(JSON.stringify(obj));
- lodash์ cloneDeep ์ฌ์ฉ(Node.js ํ๊ฒฝ)
ํ์ง๋ง ์ด ์ค spread(โฆ)์ Object.assign()์ 1 depth (ex,['a', 'b']
)๊น์ง๋ง ๊น์ ๋ณต์ฌ๊ฐ ๊ฐ๋ฅํ๊ณ , ์ค์ฒฉ ๋ฐฐ์ด์ 2 depth ์ด์(ex, [['a', 'b'], 'c']
๋ถํฐ๋ ์์ ๋ณต์ฌ๊ฐ ๋๋ ํ๊ณ๊ฐ ์๋ค. ๋ฐ๋ผ์ ์ค์ฒฉ๋ ๊ฐ์ฒด๋ ํด๋น ๋ฌธ๋ฒ์ ์ฌ๊ท์ ํ์ฉ์ด๋ ์ด๋ฅผ ์ด๋ฏธ ๊ตฌํํ loadsh ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ์ฌ์ฉ์ ํตํด์ ๊น์ ๋ณต์ฌ๋ฅผ ํ ์ ์๋ค.
-
2์ฐจ์ ๋ฐฐ์ด์ spread operator๋ฅผ ์ฌ์ฉํ์ฌ ๋ณต์ฌํ ๊ฒฝ์ฐ
- ๋ณต์ฌ๋ ๋ฐฐ์ด์ ์๋ณธ ๋ฐฐ์ด์ 1depth์ ๋ณํ์ ๋ํด์๋ ์ํฅ์ ๋ฐ์ง ์๊ณ , 2depth ์ด์์ ๋ณํ์์๋ ํจ๊ป ๋ณํ๋ ๋ชจ์ต์ ์๋ ์ฝ๋์์ ํ์ธํ ์ ์๋ค.
const originArray = ["123", "456", "789", ["hi"]]
const newArray = [...originArray]
originArray[1] = "wow"
originArray[3][0] = ["bye"]
console.log(originArray) // [ '123', 'wow', '789', [ [ 'bye' ], 'hello' ] ]
console.log(newArray) // ['123', '456', '789', [['bye'], 'hello']];
์ฐธ์กฐ๊ฐ(๋ฐฐ์ด๊ณผ ๊ฐ์ฒด)์ ๋ณต์ฌ ์ ๋ฆฌ
-
๋ฐฐ์ด์ ๋ณต์ฌ
-
์์๋ณต์ฌ
-
๊ทธ๋ฅ ํ ๋น
- 1 depth๋ถํฐ ์์ ๋ณต์ฌ๋๋ค.
-
spread operator ๋๋ slice() ๋ฉ์๋
- 1 depth๊น์ง๋ ๊น์ ๋ณต์ฌ๊ฐ ๋๋, 2depth ๋ถํฐ ์์ ๋ณต์ฌ๋๋ค.
-
-
๊น์๋ณต์ฌ
- spread operator ๋๋ slice() ๋ฉ์๋๋ฅผ depth๋งํผ ์ฌ๋ฌ๋ฒ ๋๋ ์ฌ๊ท์ ์ผ๋ก ์ฌ์ฉ
- JSON.parse(JSON.stringify());
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ(lodash์ cloneDeep ๋ฑ )
-
-
๊ฐ์ฒด์ ๋ณต์ฌ
-
์์ ๋ณต์ฌ
-
๊ทธ๋ฅ ํ ๋น
- 1 depth๋ถํฐ ์์ ๋ณต์ฌ๋๋ค.
-
spread operator ๋๋ Object.assign() ๋ฉ์๋
- 1 depth๊น์ง๋ ๊น์ ๋ณต์ฌ๊ฐ ๋๋, 2depth ๋ถํฐ ์์ ๋ณต์ฌ๋๋ค.
-
-
๊น์ ๋ณต์ฌ
- spread operator ๋๋ Object.assign() ๋ฉ์๋๋ฅผ depth๋งํผ ์ฌ๋ฌ๋ฒ ๋๋ ์ฌ๊ท์ ์ผ๋ก ์ฌ์ฉ
- JSON.parse(JSON.stringify());
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ(lodash์ cloneDeep ๋ฑ )
-
- ์ฐธ๊ณ ๋ก JSON.parse(JSON.stringify()) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊น์ ๋ณต์ฌ๋ฅผ ํ ๋๋, ํน์ ๋ฐ์ดํฐ ํ์ (ํจ์, ์ ๊ทํํ์ ๋ฑ)์ด ์ง์๋์ง ์์ผ๋ฉฐ, ํด๋น ๋ฉ์๋ ์์ฒด๊ฐ ์ฌ๊ท ๋ก์ง์ด์ฌ์ ์ฑ๋ฅ์ด ์ข์ง ์์ ์ ์๋ ์ ์ ๊ณ ๋ คํด์ผ ํ๋ค.
18. ๋ฐฐ์ด ๊ณ ์ฐจํจ์์์ break๋ continue๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋
- ๋ฐฐ์ด ๊ณ ์ฐจํจ์(forEach, map, fliter ๋ฑ)์์
break
์continue
์ ์ฌ์ฉ์ด ๋ถ๊ฐํ๋ค. ํด๋น ๊ณ ์ฐจํจ์๋ค์์๋ ์ด๋ค์ ๋ฌธ๋ฒ์ ์ผ๋ก ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
const orders = ["first", "second", "third"]
orders.forEach(function(order) {
if (order === "second") {
break // SyntaxError: Illegal break statement
}
console.log(order)
})
- ํด๋น ๊ณ ์ฐจํจ์๋ฅผ ์ฐ๋ฉด์ ๋ฐ๋ณต์ ์ค๊ฐ์ ๋๋ด์ด ์ต์ ํ๋ฅผ ํ๊ณ ์ถ์ผ๋ฉด, ์กฐ๊ฑด์ ๋ฐ๋ผ ์์ธ๋ฅผ ๋์ง๋
try catch ๊ตฌ๋ฌธ
์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
const orders = ["first", "second", "third"]
try {
orders.forEach(function(order) {
if (order === "second") {
throw error
}
console.log(order)
})
} catch (error) {}
- ํ์ง๋ง, ์ค๊ฐ์ ๋ฉ์ถฐ์ผ ํ๋ค๋ฉดย
forEach()
๊ฐ ์ ์ ํ ๋ฐฉ๋ฒ์ด ์๋์ง๋ ๋ชจ๋ฅธ๋ค. ์ฌ์ค ๊ทธ๋ฅfor๋ฌธ
์ด๋for of ๋ฌธ
,for in ๋ฌธ
์ค์ ์ ํํด์ ์ํ๋break
๋continue
๋ฅผ ์ฌ์ฉํ๋ ํธ์ด ๋์ ์ ์๋ค. -
๊ทธ๋ฆฌ๊ณ Array์
every()
,some()
,find()
,findIndex()
๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์กฐ๊ธฐ์ ๋ฃจํ ๋ฐ๋ณต์ ์ข ๋ฃํ ์ ์๋ค. ์ด ๋ฉ์๋๋ค์ ๋ฐฐ์ด ์์๋ฅผ ํ๋ณ ํจ์์ ์ ๋ฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ์ ์ฐธ/๊ฑฐ์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ฐ๋ณต์ ์ข ๋ฃ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํ๋ค.every()
ย ๋ฉ์๋๋ ๋ฐฐ์ด ์์ ๋ชจ๋ ์์๊ฐ ์ฃผ์ด์ง ํ๋ณ ํจ์๋ฅผ ํต๊ณผํ๋์ง ํ ์คํธํฉ๋๋ค. Boolean ๊ฐ์ ๋ฐํํฉ๋๋ค.some()
ย ๋ฉ์๋๋ ๋ฐฐ์ด ์์ ์ด๋ค ์์๋ผ๋ย ์ฃผ์ด์ง ํ๋ณ ํจ์๋ฅผ ํต๊ณผํ๋์ง ํ ์คํธํฉ๋๋ค.find()
ย ๋ฉ์๋๋ ์ฃผ์ด์ง ํ๋ณ ํจ์๋ฅผ ๋ง์กฑํ๋ย ์ฒซ ๋ฒ์งธ ์์์ย ๊ฐ์ย ๋ฐํํฉ๋๋ค. ๊ทธ๋ฐ ์์๊ฐ ์๋ค๋ฉดย undefined๋ฅผ ๋ฐํํฉ๋๋ค.findIndex()
ย ๋ฉ์๋๋ย ์ฃผ์ด์ง ํ๋ณ ํจ์๋ฅผ ๋ง์กฑํ๋ย ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์์ ๋ํย ์ธ๋ฑ์ค๋ฅผ ๋ฐํํฉ๋๋ค. ๋ง์กฑํ๋ ์์๊ฐ ์์ผ๋ฉด -1์ ๋ฐํํฉ๋๋ค.
19. ๊ฐ์ฒด์ Computed property Name๊ณผ lookup table ํ์ฉ
1) Computed property Name
-
computed property name์ ๊ฐ์ฒด์ key ๊ฐ์ ๋๊ดํธ ๋ฌถ์ธ ํํ์์ผ๋ก ์ ์ํ ์ ์๋ ๋ฌธ๋ฒ์ด๋ค.
- ์ฆ, ํ๋กํผํฐ ์ด๋ฆ์ด ๊ณ์ฐ๋ ์ ์๋ค.
const funcName0 = "func0"
const funcName1 = "func1"
const funcName2 = "func2"
const obj = {
[funcName0]() {
return "func0"
},
[funcName1]() {
return "func1"
},
[funcName2]() {
return "func2"
},
}
for (let i = 0; i < 3; i++) {
console.log(obj[`func${i}`])
}
/* [Function: func0]
[Function: func1]
[Function: func2] */
2) object lookup table
- object lookup table์ ์ค์ ์๋ ๋ฌธ๋ฒ์ ์๋๋ค. ๋ค๋ง, ์๋ ์ฝ๋์ฒ๋ผ switch๋ฌธ์ด๋ if else๋ฌธ์ด ๋๋ฌด ๊ธธ๊ฒ ๋์ด์ง ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ๋ช ์์ ์ด๋ฉฐ ํจ์จ์ ์ธ ์ฝ๋ ์์ฑ ๋ฐฉ์์ ์ง์นญํ๋ค.
function getUserType(type) {
switch (type) {
case "ADMIN":
return "๊ด๋ฆฌ์"
case "INSTRUCTOR":
return "๊ฐ์ฌ"
case "STUDENT":
return "์๊ฐ์"
default:
return "ํด๋น ์์"
}
}
console.log(getUserType("INSTRUCTOR")) // ๊ฐ์ฌ
console.log(getUserType("a")) // ํด๋น ์์
- switch ๋ฌธ์ผ๋ก ์ด๋ฃจ์ด์ง ์ ์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด object์ ์์๋ฅผ ์ด์ฉํ์ฌ ์ผ์ข ์ lookup table์ฒ๋ผ ๋ฆฌํฉํ ๋งํ์ฌ ํ์ฉํ ์ ์๋ค.
function getUserType(type) {
const USER_TYPE = {
ADMIN: "๊ด๋ฆฌ์",
INSTRUCTOR: "๊ฐ์ฌ",
STUDENT: "์๊ฐ์",
UNDEFINED: "ํด๋น ์์",
}
return USER_TYPE[type] ?? USER_TYPE.UNDEFINED
}
console.log(getUserType("INSTRUCTOR")) // ๊ฐ์ฌ
console.log(getUserType("a")) // ํด๋น ์์
20. ๊ฐ์ฒด ๊ตฌ์กฐ๋ถํดํ ๋น
ํจ์์ ๋งค๊ฐ๋ณ์์ ๊ฐ์ฒด ๊ตฌ์กฐ๋ถํดํ ๋น
function Person(name, age, location) {
this.name = name
this.age = age
this.location = location
}
const marco = new Person("Marco", 30, "Korea")
-
์์ ๊ฐ์ ์ฝ๋๋ฅผ ์๋ ์ฝ๋์ฒ๋ผ ๊ตฌ์กฐ๋ถํดํ ๋น์ ํ์ฉํ์ฌ ๋ฆฌํฉํ ๋ง ํ ์ ์๋ค.
- ํจ์์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ฒด๋ก ๋ฐ๊ณ , ์ธ์๋ฅผ ๊ฐ์ฒด๋ก ์ ๋ฌํ๋ค๋ฉด, ์ ๋ฌํ๋ ๋งค๊ฐ๋ณ์๋ฅผ ๋ช ์์ ์ผ๋ก ์ธ ์ ์์ผ๋ฉฐ ๋งค๊ฐ๋ณ์์ key๋ง ๊ฐ์ผ๋ฉด ๋๋ฏ๋ก ๋งค๊ฐ๋ณ์์ ์์๊ฐ ๋ค๋ฅด๋๋ผ๋ ์๊ด ์๋ค.
function Person({ name, age, location }) {
this.age = age
this.name = name
this.location = location
}
const marco = new Person({ name: "Marco", age: 30, location: "Korea" })
ํจ์์ ๋งค๊ฐ๋ณ์ ์ค ์ต์ ๋ช ์
-
๋ํ ํจ์์ ๋งค๊ฐ๋ณ์ ์ค ์ต์ ์ด ๋ฌด์์ธ์ง ์๋ ค์ฃผ๋ ๋ฐ๋ ์ ์ฉํ๋ค.
- ์๋ ์ฝ๋์ ํจ์์์ ๋งค๊ฐ๋ณ์ ์ค name์ ํ์์ ์ด๋ผ๋ ๊ฒ์ ๋ช ์์ ์ผ๋ก ๋ณด์ฌ์ฃผ๊ณ , ๊ฐ์ฒด๋ก ๋ฌถ์ธ ๋งค๊ฐ๋ณ์ {age, location}๋ ๊ทธ ํํ๋ฅผ ํตํด ์ต์ ์์ ์๋ ค์ค๋ค.
function Person(name, { age, location }) {
this.age = age
this.name = name
this.location = location
}
const options = {
age: 30,
location: "Korea",
}
const Marco = new Person("Marco", options)
const orders = ["first", "second", "third"]
๋ฐฐ์ด์์๋ ๊ฐ์ฒด ๊ตฌ์กฐ๋ถํดํ ๋น
- ๋ฐฐ์ด์ ๋ํด์๋ ๊ตฌ์กฐ๋ถํดํ ๋น์ ํ ์ ์๋ค.
const orders = ["first", "second", "third"]
const st1 = orders[0]
const rd1 = orders[2]
console.log(st1) // first
console.log(rd1) // third
- ์์ ๊ฐ์ ์ฝ๋์์ ๋ฐฐ์ด์ ์์๋ฅผ ์ ํํ ๋, ์๋์ฒ๋ผ ๊ฐ์ฒด๋ก ๊ตฌ์กฐ๋ถํดํ ๋นํ๋ฉด ๋ ๋ช ์์ ์ผ๋ก ์ ํํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
const orders = ["first", "second", "third"]
const { 0: st2, 2: rd2 } = orders // ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ key๋ก ๊ฐ์ฒด๊ตฌ์กฐ๋ถํดํ ๋นํ๋ค
console.log(st2) // first
console.log(rd2) // third
21. ๊ฐ์ฒด ๋ณ๊ฒฝ ๋ฐฉ์ง ๋ฉ์๋
-
๊ฐ์ฒด ๋ณ๊ฒฝ ๋ฐฉ์ง ๋ฉ์๋
- ๊ฐ์ฒด ํ์ฅ ๊ธ์ง :
Object.preventExtensions()
, ํ์ฅ์ด ๊ธ์ง๋ ๊ฐ์ฒด๋ ํ๋กํผํฐ ์ถ๊ฐ๊ฐ ๊ธ์ง๋๋ค. - ๊ฐ์ฒด ๋ฐ๋ด :
Object.seal()
, ๋ฐ๋ด๋ ๊ฐ์ฒด๋ ์ฝ๊ธฐ์ ์ฐ๊ธฐ๋ง ๊ฐ๋ฅํ๋ค - ๊ฐ์ฒด ๋๊ฒฐ :
Object.freeze()
, ๋๊ฒฐ๋ ๊ฐ์ฒด๋ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๋ค.
- ๊ฐ์ฒด ํ์ฅ ๊ธ์ง :
- ๊ฐ์ฒด๊ฐ ์ ๋๊ฒฐ๋์๋์ง ํ์ธํ๋ ค๋ฉด,
Object.isFrozen()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐํ๋ ๋ถ๋ฆฐ๊ฐ์ ํ์ธํ ์ ์๋ค. - ๊ทธ๋ฐ๋ฐ
Object.freeze()
๋ 2 depth ์ด์์ ์ค์ฒฉ๋ ์์ญ์ ๋ํด์๋ ๋๊ฒฐํ์ง ๋ชปํ๋ค(์ฐธ์กฐ๊ฐ์์ ์ผ๋ฐ์ ์ธ ๋ณต์ฌ ๋ฐฉ๋ฒ์ผ๋ก๋ ์์ ๋ณต์ฌ๋ฐ์ ๋์ง ์๋ ์๋ฆฌ์ ๊ฐ๋ค) -
๋ฐ๋ผ์ 2 depth ์ด์์ ์ค์ฒฉ๋ ์์ญ์ ๋ํด์๋ ๋๊ฒฐํ๋ ค๋ฉด,
์ค์ฒฉ๋ freezing
์ ํด์ผ ํ๋ค.- ์ค์ฒฉ๋ freezing์ ๋์ค์ ์ธ ์ ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(
lodash
)์ ์ฌ์ฉํ๊ฑฐ๋ ์ง์ ์ ํธ ํจ์ ์์ฑํ์ฌ ํ๋ ๋ฐฉ๋ฒ์ด ์๋ค.
- ์ค์ฒฉ๋ freezing์ ๋์ค์ ์ธ ์ ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(
< ์ง์ ์ ํธ ํจ์์ ๋ก์ง์ ๋ค์๊ณผ ๊ฐ๋ค. >
- 1.๊ฐ์ฒด๋ฅผ ์ํํ๋ฉด์,
- 2.๊ฐ์ด ๊ฐ์ฒด์ธ์ง ํ์ธํ์ฌ
- 3.๊ฐ์ฒด์ด๋ฉด `์ฌ๊ท`ํ๊ณ
- 4.๊ทธ๋ ์ง ์์ผ๋ฉด Object.freeze()ํ๋ค.