Medium - Understand the Superpower of Optional Chaining in JavaScript
in Trend
Trend νμ μ μν Medium κΈ°κ³ λ¬Έ ν¬μ€ν - μλ°μ€ν¬λ¦½νΈμ κ°λ ₯ν μ΅μ λ 체μ΄λμ μ΄ν΄ν΄ λ΄ μλ€; μλ°μ€ν¬λ¦½νΈμ μλ‘μ΄ κΈ°λ₯μ μ΅μ λ 체μ΄λμ λν΄ μμλ΄ μλ€.
?.
-> μ΅μ
λ 체μ΄λ μ€νΌλ μ΄ν°
Image from twitter by Daniel Rosenwasser (@Daniel Rosenwasser).
Optional Chaining
μ΅μ λ 체μ΄λμ κ°μ²΄μμ νλ‘νΌν°κ° μ¬μ© κ°λ₯νμ§ μλμΌλ‘ 체ν¬ν νμκ° μλλ‘ λ§λ€μ΄ μ€ κ²μ λλ€. μ΅μ λ 체μ΄λμ μ¬μ©νλ©΄ λ΄λΆμ μΌλ‘ 체ν¬κ° μνλ κ²μ λλ€. μ΅μ λ 체μ΄λμ΄ μλ μμ λ₯Ό 보μμ£ .
function sayHi(user) {
let name = user.name.toUpperCase();
console.log(`Hi Mr. ${name}`);
}
μμ ν¨μλ₯Ό 보μλ©΄ hiμ ν¨κ» μ¬μ©μμ μ΄λ¦μ΄ μΆλ ₯λ κ²μ λλ€.
var user1 = { name: "John" };
sayHi(user1); // Hi Mr.JOHN.
κ·Έλ¬λ name νλ‘νΌν°κ° μλ user κ°μ²΄λ₯Ό μ λ¬νλ€λ©΄ μλμ κ°μ΄ μλ¬κ° λ°μν κ²μ λλ€.
sayHi({});
// TypeError: Cannot read property 'toUpperCase' of undefined.
sayHi();
// TypeError: Cannot read property 'name' of undefined.
μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ°λ¦¬λ κ°μ²΄μμ name νλ‘νΌν°κ° μ¬μ©κ°λ₯ν μ§ μ²΄ν¬νλ λ‘μ§μ λ£μ΄μΌ νμ΅λλ€.
function sayHi(user) {
let name = (user && user.name && user.name.toUpperCase()) || "Unknown";
console.log(`Hi Mr. ${name}`);
}
sayHi({}); // Hi Mr. Unknown
sayHi(); // Hi Mr. Unknown
Using Optional Chaining
μ΅μ λ 체μ΄λμ μ°μ°μ μΌμͺ½μ κ°μ²΄κ° μ ν¨νμ§ (nullμ΄λ undefinedκ° μλμ§) νμΈν©λλ€. νλ‘νΌν°κ° μ ν¨νλ€λ©΄ μ°μ°μ μ€λ₯Έμͺ½μ μ€ννκ³ μλλΌλ©΄ undefinedλ₯Ό 리ν΄ν©λλ€. κ°λ¨ν μμ λ₯Ό νλ² λ³΄μμ£
function sayHi(user) {
let name = ( user?.name?.toUpperCase() )|| "unKnown";
console.log(`Hi Mr. ${name}`);
}
μ΅μ λ 체μ΄λ μ°μ°μμ λμΌν λ€μ΄ν°λΈ μλ° μ€ν¬λ¦½νΈ μ½λλ λ€μκ³Ό κ°μ΅λλ€.
(property == undefined || property == null ) ? undefined : property
Using variables as property name
μ΅μ λ 체μ΄λμ μλ νλ‘νΌν° μ΄λ¦μ λ³μμ²λΌ μ¬μ©ν μλ μμ΅λλ€.
var user = {name: "John", age: 20};
var Age = "age";
user?.[Age];
user?.["a"+"ge"]
Function call with optional chaining
μ‘΄μ¬νμ§ μμ μλ μλ λ©μλλ₯Ό νΈμΆνλ λ°μλ μ΅μ λ 체μ΄λμ μ¬μ©ν μ μμ΅λλ€.
var user = {
name: "John",
getName() {
return this.name;
}
}
user?.getName?.();
Summary
- μλ°μ€ν¬λ¦½νΈμ μ΅μ λ 체μ΄λμ΄ μΆκ°λμλ€
- undefinedλ₯Ό μ°Έμ‘°νλ λ°μμ λ§€μ° λ§μ μλ¬κ° λ°μνλλ§νΌ JSμμλ νμ 체ν¬κ° μ€μνλ€; κ·Έλμ νμ μ€ν¬λ¦½νΈκ° μΈκΈ° μλ 거ꡬ..
- κΈ°μ‘΄μ λ‘μ§, μ½λ μ€νμΌλ³΄λ€ μ’ λ κΉλνκ² μ²λ¦¬ν μ μλ μ΅μ λ 체μ΄λμ΄ μΆκ°λμλ€.