μμ°μ± 2λ°° λμ΄λ JavaScript μ΅μ ES κΈ°λ₯ νμ©λ² TOP 10 ππ₯οΈβ¨
μ¬λ¬λΆ νΉμ "μ μμ§λ JavaScript μ΅μ κΈ°λ₯λ€μ μ λͺ°λΌμ μκ° λλΉνκ³ μμ§?" π±λΌλ μκ° λ€μ΄λ³Έ μ μλμ? μλλ©΄ "λ΄ μ½λκ° λλ¦¬κ³ λ³΅μ‘νλ°, λκ° λ ν¨μ¨μ μΈ λ°©λ²μ΄ μμκΉ?" π§ κ³ λ―Όνλ κ°λ°μλΆλ€μ μν΄ μ€λμ π₯JavaScript μ΅μ ECMAScript(ES)μ ν΅μ¬ κΈ°λ₯ TOP 10π₯μ μκ°ν΄λλ¦¬λ €κ³ ν©λλ€! μ΄ κΈ°λ₯λ€μ μ λλ‘ νμ©νλ©΄ κ°λ° μμ°μ±μ λ λ°°, νλ‘μ νΈ ν리ν°λ μΈ λ°°λ‘ UP! π―
κ·ΈλΌ λ°λ‘ μμν κ²μ! ποΈπ¨
π― μ μ΅μ ES κΈ°λ₯μ΄ μ€μν κΉ? π€
- β±οΈ κ°λ° μκ° λ¨μΆ!οΈ μ½λ κ°κ²°ν + λΉ λ₯Έ λλ²κΉ
- π μ±λ₯ ν₯μ!οΈ λΈλΌμ°μ μ νκ²½μμ μ΅μ ν κ°λ₯
- π§© μ μ§λ³΄μ μ¬μ!οΈ λͺ νν λ¬Έλ² + μμΈ‘ κ°λ₯ν μ½λ
- π κ°λ° μ¬λ―Έ UP! μ΅μ λ¬Έλ²μΌλ‘ μ¬λ―Έμκ³ κΉλνκ²
μ΄μ 본격μ μΌλ‘, μμ°μ±μ 2λ°° λμ΄λ μ΅μ ES κΈ°λ₯ TOP 10μ ν λ² μ΄ν΄λ³ΌκΉμ? π₯π₯
1οΈβ£ Optional Chaining ?.
— μμ νκ² νλ‘νΌν° μ κ·ΌνκΈ° πͺπ
π κ°μ
볡μ‘ν κ°μ²΄ λ΄ νλ‘νΌν°μ μ κ·Όν λ, μ‘΄μ¬ μ¬λΆ νλ¨ μμ΄ μμ νκ² μ 보λ₯Ό κ°μ Έμ¬ μ μλ μ΅μ λ¬Έλ²μ
λλ€. λ§μ½ μ€κ° νλ‘νΌν°κ° null
λλ undefined
μ΄λ©΄, μ€λ₯ λμ undefined
λ₯Ό λ°νν©λλ€!
β μμ
javascript
const user = { profile: { name: "μ€νΈ" } };
// μ ν΅μ λ°©λ²: μν! μ‘΄μ¬νμ§ μμΌλ©΄ μ€λ₯ λ°μ
console.log(user.profile?.name); // "μ€νΈ"
console.log(user.settings?.theme); // undefined, μμ νκ² μ²λ¦¬
π₯ ν΅μ¬ ν¬μΈνΈ
- β νμ΄νλΌμΈμ²λΌ μ²΄μΈ μ°κ²° κ°λ₯!
- β κΉμ κ°μ²΄ ꡬ쑰μμ μ€λ₯ λ°©μ§!
- β μ€μ²© κ°μ²΄κ° λΆμμ ν λ μ μ©!
2οΈβ£ Nullish Coalescing ??
— κ°μ΄ μμ λ λμ²΄κ° μ¬μ©νκΈ° β¨
π κ°μ
null
λλ undefined
μΌ λλ§ λ체κ°μΌλ‘ μΉνν΄μ£Όλ μ°μ°μμ
λλ€. 'μ΄κ±°λ μ κ±°λ' 쑰건μΈ
||`λ³΄λ€ ν¨μ¬ μ ν!
β μμ
javascript
const nickname = null;
const defaultName = "μλ";
console.log(nickname ?? defaultName); // "μλ"
π₯ ν΅μ¬ ν¬μΈνΈ
- β Falsyκ°(0, "") λ±μ κ·Έλλ‘ μ μ§!
- β λͺ νν κ° ν λΉ κ°λ₯
- β μ΄λ³΄μλ μ½κ² μ΄ν΄νλ 쑰건 μ²λ¦¬!
3οΈβ£ Promise.allSettled() — μ¬λ¬ λΉλκΈ° μμ μ κ²°κ³Ό λͺ¨λ 보기 ππ€
π κ°μ
μ¬λ¬ λΉλκΈ° ν¨μλ₯Ό λͺ¨λ μ€νν ν, μ±κ³΅·μ€ν¨ μ¬λΆμ κ²°κ³Όλ₯Ό κ°κ° νμΈν μ μλ μλ‘μ΄ Promise λ°©μμ λλ€.
β μμ
javascript
Promise.allSettled([
fetchData1(),
fetchData2(),
])
.then(results => results.forEach(result => console.log(result.status)));
π₯ ν΅μ¬ ν¬μΈνΈ
- β λͺ¨λ κ²°κ³Όλ₯Ό 체ν¬!
- β μ€ν¨ν νλ‘λ―Έμ€λ ν¬κΈ°νμ§ μκ³ μ΄ν΄λ΄
- β 볡μ‘ν λΉλκΈ° νλ¦μμ κΉλ!
4οΈβ£ β μ΄ν°λ μ΄ν°μ μ λλ μ΄ν° β ππ²
π κ°μ
function*
ν€μλλ‘ λ§λ€μ΄μ§ μ λλ μ΄ν° ν¨μλ λ°λ³΅ κ°λ₯ν 'μν μ μ₯' ν¨μμ
λλ€. 볡μ‘ν μ΄ν°λ μ΄μ
μ μ μ΄νκ³ μΆμ λ μμ μ μ©!
β μμ
javascript
function* countdown() {
let num = 5;
while (num > 0) {
yield num--;
}
}
for (const n of countdown()) {
console.log(n); // 5 4 3 2 1
}
π₯ ν΅μ¬ ν¬μΈνΈ
- β μν μ μ₯ κ°λ₯!
- β μ΄λ²€νΈ κΈ°λ° μ μ΄μ νμ!
- β 볡μ‘ν λ°λ³΅ λ‘μ§ κ°μν!
5οΈβ£ BigInt — λ§€μ° ν° μ«μλ μ λ°νκ² κ³μ°νκΈ° π’π―
π κ°μ
μ ν΅μ μΈ Number
λ μμ ν μ μ λ²μ(2^53 - 1
)κΉμ§λ§ μ νν©λλ€. κ·Έ μ΄μ ν° μλ BigInt
λ‘ μ²λ¦¬!
β μμ
javascript
const largeNumber = 9007199254740991n; // λμ 'n' λΆμ΄κΈ°
console.log(largeNumber * 2n); // 18014398509481982n
π₯ ν΅μ¬ ν¬μΈνΈ
- β ν° μ«μ μ°μ° κ°λ₯!
- β κΈμ΅, κ³Όν κ³μ°μμ μ λ’°μ±↑
- β ꡬνμ΄ κ°λ¨!
6οΈβ£ Dynamic Import (import()
) — μ½λ λΆν κ³Ό λΉλκΈ° λ‘λ© ππ¦
π κ°μ
λͺ¨λμ νμν λλ§ λΆλ¬μ€λ λΉλκΈ°μ λͺ¨λ λ‘λ© κΈ°λ²μ λλ€. μΉ μ± μ±λ₯ μ΅μ νμ νμ!
β μμ
javascript
import('./module.js').then(module => {
module.start();
});
π₯ ν΅μ¬ ν¬μΈνΈ
- β μ΄κΈ° λ‘λ μκ° λ¨μΆ!
- β 쑰건μ λ°λΌ λͺ¨λ λΆλ¬μ€κΈ° κ°λ₯!
- β λͺ¨λ κΈ°λ° μ΅μ ν!
7οΈβ£ Logical Assignment Operators (&&=
, ||=
, ??=
) — κ°κ²°ν λ³μ ν λΉ π§π€
π κ°μ
κΈ°μ‘΄μ 쑰건문 μμ΄ ν λΉκ³Ό λμμ 쑰건 κ²μ¬κ° κ°λ₯ν μλ‘μ΄ μ°μ°μλ€μ λλ€.
β μμ
javascript
let name = null;
name ??= "μ΅λͺ
"; // nameμ΄ null/undefinedλ©΄ "μ΅λͺ
" ν λΉ
console.log(name); // "μ΅λͺ
"
π₯ ν΅μ¬ ν¬μΈνΈ
- β μ½λ κ°κ²°ν!
- β μ‘°κ±΄λΆ ν λΉμ λ±!
- β κ°λ μ± μμΉ!
8οΈβ£ Setκ³Ό Mapμ κ°μ λ λ¬Έλ²κ³Ό νμ© π―π
π κ°μ
ES6 μ΄ν λν 컬λ μ μΈ Setκ³Ό Mapμ΄ λ κ°λ ₯ν κΈ°λ₯κ³Ό λ©μλλ₯Ό κ°μΆκ³ μμ΄, λ°μ΄ν° κ΄λ¦¬κ° ν¨μ¬ μμ!
β 체ν¬ν¬μΈνΈ
Set.prototype.union()
,intersection()
λ± μ»€μ€ν κ°λ₯Map.prototype.with()
λ‘ λ³κ²½ κ°λ₯- π λ°μ΄ν° μ€λ³΅ μ κ±°, λΉ λ₯Έ κ²μμ μ΅μ
π₯ ν΅μ¬ ν¬μΈνΈ
- β ν¨μ¨μ λ°μ΄ν° ꡬ쑰!
- β κ°μ λ λ΄μ₯ λ©μλ!
- β κΉλν λ°μ΄ν° μ²λ¦¬!
9οΈβ£ Nullish Coalescing Assignment ??=
— μμ ν κΈ°λ³Έκ° ν λΉ β¨π
π κ°μ
λ³μκ° null
λλ undefined
μΌ λλ§ κ°μ ν λΉνλ κ°λ¨ν λ¬Έλ²μ
λλ€.
β μμ
javascript
let userScore;
userScore ??= 10; // null or undefinedλ©΄ 10 ν λΉ
π₯ ν΅μ¬ ν¬μΈνΈ
- β μ‘°κ±΄λΆ ν λΉ κ°λ¨!!
- β μ΄κΈ°κ° μ§μ μ μ¬μ©νκΈ° μ’μμ!
- β μ½λ 보μ μ§§μμ§!
10οΈβ£ μ 리νλ©° π
πκΈ°λ₯ | π‘ν΅μ¬ ν¬μΈνΈ | π―νμ© μμ |
---|---|---|
?. μ΅μ
λ 체μ΄λ |
μμ ν κΉμ νλ‘νΌν° μ κ·Ό | user?.profile?.name |
?? λ λ³ν© μ°μ°μ |
μ νν κΈ°λ³Έκ° μ§μ | value ?? default |
Promise.allSettled() |
μ€ν¨ 무μνκ³ κ²°κ³Ό μ²΄ν¬ | μ¬λ¬ λΉλκΈ° λμμ²λ¦¬ |
μ λλ μ΄ν°(function* ) |
μν μ μ₯ λ°λ³΅ | μ΄λ²€νΈ/μν μ μ΄ |
BigInt |
ν° μ«μ μ°μ° | κΈμ΅, κ³Όν |
import() |
λΉλκΈ° λͺ¨λ λ‘λ© | μ½λ λΆν |
&&= , ` |
=, ??=` |
|
Set·Map 컬λ μ | κ³ μ±λ₯ λ°μ΄ν° ꡬ쑰 | λ°μ΄ν° μ²λ¦¬ |
π κ²°λ‘ — μ§κΈ λ°λ‘ μ€μ²νμ! π
β μ΄μ μ¬λ¬λΆμ μ½λκ° νμΈ΅ λ κΉλνκ³ μ±λ₯ μ’μμ‘μ΄μ!
π μ¦μ μ€μ² ν
- μ€λλΆν° μΌλ¨
?.
,??
μ°μ°μλ₯Ό μ΅λν΄μ μ¨λ³΄μΈμ! π - λΉλκΈ° λ‘μ§μ
Promise.allSettled()
μ μ©ν΄ 보기! - νμμ λ°λΌ
import()
λ‘ μ½λ λΆν , μ΅μ ν μμ!
μ΄κ²λ€λ§ μ νμ©ν΄λ κ°λ° μκ°μ λν μ μ½! π κ·Έλ¦¬κ³ λμ€μλ “μ΄κ±Έ μΈμ μμμ§?” π μμ μ μλ λ μ΄ μ¬ κ²λλ€. μ§κΈ λ°λ‘ μ μ©ν΄μ μμ°μ± λ λ°°, μ 무 ν¨μ¨ μΈ λ°° ν₯μ β¨!
π λμΌλ‘
λ κΆκΈν μ μ΄λ, μ€μ νμ μμ μ°λ νμ΄ νμνλ€λ©΄ λκΈλ‘ λ¬Έμ μ£ΌμΈμ! π€ μ΄λ² κΈ°νμ μ΅μ ES λ¬Έλ² λ§μ€ν°ν΄μ, κ°λ ₯ν κ°λ°μλ‘ κ±°λλ보μꡬμ! πͺπ₯
μ’μμ π, 곡μ π, ꡬλ π μμ§ λ§κ³ μ! λͺ¨λ νμ΄ν ! πππ
#λ#
μ΄μ κΈ λ³΄κΈ°!!