March 28, 2021
μ΄μ μ μ ν κ²ͺμ΄λ³΄μ§ λͺ»ν μλ‘μ΄ λ¬Έλ²μ΄λ€. ν¬κ² 2κ°μ§ μ΄λ€.
μ΅μ λ 체μ΄λμ μ λ§ μ λ°νλ€ λΌλ κ²μ λκΌκ³ λ리μ μ½λ¦¬μ±μ κ²½μ°λ κΈ°μ‘΄ OR μ°μ°μ μ¬μ©μ falsy ν κ° (λΉ λ¬Έμμ΄, 0) μ λν μ²λ¦¬λ₯Ό μ΄λ»κ² λ λͺ ννκ² ν΄ μ£Όμ΄μΌ ν μ§ λ°°μΈ μ μμλ€.
κ·ΈλΌ λ€μ μμ!
μΌλ¨ μμ κ°μ²΄λ₯Ό λκ° λμ λλλ€.
const person1 = {
name: 'Mook',
job: {
title: 'S/W Engineer',
manager: {
name: 'Bob',
},
},
}
const person2 = {
name: 'Bob',
}
person1 μ ν΄λΉ μ¬λμ μ΄λ¦ κ·Έλ¦¬κ³ job μ λν λ΄μ©κ³Ό λ κ·Έ μμ μμ¬ (manager) μ λν μ λ³΄κ° λ΄κ²¨ μλ€. νμ§λ§ person2 λ person2 μ μ΄λ¦μ λν μ 보 μΈμλ μ΄λ ν μ 보λ μλ€.
μ¬κΈ°μμ λ§μ½ μλμ κ°μ ν¨μλ₯Ό ꡬννκ³ ν¨μμ μΈμμ person1 κ³Ό person2 λ₯Ό κ°κ° λ£μ΄ μ€ννλ©΄ μ΄λ»κ² λ κΉ?
function printManager(person) {
console.log(person.job.manager.name)
}
printManager(person1)
printManager(person2)
person1 μ νλΌλ―Έν°λ‘ λ£μ΄ μ€νν ν¨μ printManager λ βBobβ μ μΆλ ₯ν κ²μ΄λ€.
νμ§λ§ person2 λ₯Ό λ£μ΄ μ€νν ν¨μ printManager λ manager μ λν μ λ³΄κ° μ‘΄μ¬νμ§ μκΈ° λλ¬Έμ Uncaught TypeError λ₯Ό μΌμΌν¨λ€.
Uncaught TypeError: Cannot read property 'manager' of undefined
at printManager (<anonymous>:2:26)
at <anonymous>:1:1
μ΄λ¬ν κ²½μ°λ₯Ό λ°©μ§νκΈ° μν΄ λ€μκ³Ό κ°μ λ°©λ²λ€μ μ¬μ©ν΄ 보μλ€.
μλμ κ°μ μ½λλ‘ μ€μ²©λ Operator λ₯Ό μΈ μλ μλ€.
function printManager(person) {
console.log(
person.job
? person.job.manager
? person.job.manager.name
: undefined
: undefined
)
}
νμ§λ§ μ½λμ κ°λ μ± μΈ‘λ©΄μμ κ·Έλ κ² μ’μ λ°©μμ μλ κ² κ°λ€.
function printManager(person) {
console.log(person.job && person.job.manager && person.job.manager.name)
}
person μ job μ΄ μλ€λ©΄ && μ°μ°μμ λ€μμΌλ‘ λμ΄κ°μ person μ job μ manager κ° μλ€λ©΄, λ€μ λ€μ && μ°μ°μλ‘ λμ΄κ°μ person μ job μ manager μ μ΄λ¦μ΄ μλμ§ λ³΄κ³ μ΅μ’ μ μΌλ‘ 맀λμ μ΄λ¦μ μΆλ ₯νκ² λ ν°μ΄λ€.
νμ§λ§ μ½λ©μμ μ€λ³΅μ μ’μνμ§ μλ λ§νΌ κ³μ person.job μΌλ‘ μ½λκ° μ€λ³΅λμ΄ κ°λ κ²μ λ³Ό μ μλ€.
2μ κ°μ μ€λ³΅μ νΌνκ³ μ μ΄μ Optional Chaining μ μ΄μ©νλ€.
function printManager(person) {
console.log(person.job?.manager?.name)
}
printManager(person1)
printManager(person2)
μ κΈ°νλ€.
κΈ°μ‘΄ OR μ°μ°μμ μ¬μ©μ λν΄μ μ κΉ λ€λ€λ³΄μλ©΄ Node.js μμ νκ²½λ³μ (process.env) λ₯Ό λ€λ£° λ, νΉμ μνλΌμ΄μ¦λ₯Ό μ¬μ©ν΄μ λͺ¨λΈμ mysql κ³Ό μ°κ²° νμ λ μλμ κ°μ μ½λλ₯Ό λ³Έ κΈ°μ΅μ΄ μμ κ²μ΄λ€.
(λκ°μ μ½λλ μλκ³ λΉμ·ν μ½λλ₯Ό 첨λΆ..)
let server = {
env: process.env.NODE_ENV,
port: process.env.PORT || 4000,
ip: process.env.IP || '0.0.0.0',
...
};
μ΄ λ OR μ°μ°μλ₯Ό μ¬μ©νλ€.
λ¬Όλ‘ λ³΄λ€ λ μ¬μ΄ μμλ₯Ό μμ±ν΄ 보μ.
const name = 'mook'
const userName = name || 'Guest'
console.log(userName)
μ΄λ¬ν OR μ΄λ AND μ°μ°μλ₯Ό μ¬μ©ν λλ βκ±°μ§:falseβ μ νΉμ±μ μ‘°κΈ μ΄ν΄ν νμκ° μλ€.
false λ κ·Έ μμ²΄λ‘ κ±°μ§μ΄μ§λ§, β(λΉ λ¬Έμμ΄), 0(μ«μ), null, undefined λ falsy ν κ°μΌλ‘ κ°μ£Όλμ΄ μ§κΈ° λλ¬Έμ΄λ€.
const userName = name || 'Guest'
λ€μ, OR μ°μ°μ μμ μλ name μ΄ false μΌ λλ§ λ€μ μλ βGuestβ κ° μ€νλλ μ±μ§μ΄ μλ€.
κ·Έλμ μλμ κ°μ΄ name μ null μ΄ ν λΉλκ±°λ undefined κ° ν λΉλλ€λ©΄ userName μ βGuestβ κ° μ°νλ€.
λ§λ€.
const name = null
const userName = name || 'Guest'
console.log(userName)
κ·Έλ°λ° name μ λΉ λ¬Έμμ΄μ΄λ 0 μ΄ ν λΉλλ€λ©΄ μ΄λ¨κΉ? κ·Έλλ Guest κ° μ°ν ν λ° μ΄κ²μ΄ μ½λλ₯Ό μμ±νλ μλλλ‘ λ§λ λ°©λ²μΌκΉ?
μ΄λ€ νΉμ ν κ°μ΄ null μ΄λΌλ©΄, μ ν΄μ§μ§ μμλ€λ©΄ (undefined) κΈ°λ³Έμ μΈ κ°μ ν λΉνλλ‘ OR μ°μ°μλ₯Ό λ§μ΄ μΌλλ°
μ΄μ²λΌ name μ΄ null, undefined μΈ κ²½μ° μ¦ μλ¬΄λ° κ²λ μ§μ λμ§ μμ κ²½μ°μλ§ βGuestβ λ₯Ό μΆλ ₯νκ² νκ³ μΆμλ°
const name = ''
const userName = name || 'Guest'
console.log(userName)
μ΄λ κ² λ¬Έμμ΄μ΄ λΉμ΄ μλ κ²½μ°μλ false λ‘ κ°μ£ΌλκΈ° λλ¬Έμ μ΄ μμ βGuestβ κ° ν λΉλμ΄ λ²λ¦°λ€.
μ¦, μ¬μ©μμ μλλ μ무 μ΄λ¦λ μ°κ³ μΆμ§ μμ κ²μΈλ° μ΄ κ²½μ°μλ μμ βGuestβ κ° ν λΉμ΄ λλ κ²μ΄λ―λ‘
λ°λ‘ λ²κ·Έ! λΌ ν μ μλ€!
λ³μμ 0 μ΄ ν λΉλλ μλμ κ²½μ°λ λ§μ°¬κ°μ§ μ΄λ€.
const num = 0
const message = num || 'undefined'
console.log(message)
μ΄μ²λΌ λ³μ num μ΄ μ«μ 0 μΌλ‘ μ§μ λμ΄ μμμλ λΆκ΅¬νκ³ message μ μΆλ ₯μ undefined κ° λμ€κ² λμ΄ λ²λ¦°λ€λ κ²μ΄λ€.
μ«μ 0 μ΄ ν λΉλμμ§λ§ 0 μ false λ‘ κ°μ£Όλμ΄ μ§λ€ ν΄μ μ΅μΈ? νκ² λ€μ κ²μΈ undefined κ° ν λΉλ κ²μ νμΈν μ μλ€.
OR μ°μ°μλ μ΄λ¬ν νΉμ± λλ¬Έμ μ μ΄ν΄νκ³ μ¬μ©ν΄μΌ νλ€. μλλ©΄ μ΄λ¬ν μμΈ λ€λ‘ μΈν΄ κ³ μν μλ μμ κ±° κ°λ€.
μ΄μ Nullish Coalescing λ₯Ό μ¬μ©νλ€. OR μ°μ°μ λμ ?? μ°μ°μλ₯Ό μ¬μ©νλ κ²μ΄λ€.
const name = ''
const userName = name ?? 'Guest'
console.log(userName)
const num = 0
const message = num ?? 'undefined'
console.log(message)