[Javascript] λ λ³ν©μ°μ°μ '??'μ μ΅μ λ 체μ΄λ '?.'
μλ°μ€ν¬λ¦½νΈμ '?'
ES2020μμ λμ
λ μλ‘μ΄ λ¬Έλ²λ€ μ€ μ΅μ
λ 체μ΄λ μ°μ°μ ?.
μ null λ³ν© μ°μ°μ ??
λ λͺ¨λ λ¬Όμνλ₯Ό μ΄λ€.
μ¬μ©λλ λ°©μλ nullμ΄λ undefined κ°μ 체ν¬ν μ μλ€λ μ μμ λΉμ·ν κ² μλ κ² κ°μ, μ΄ λμ νλ² λ¬Άμ΄μ μ 리ν΄λ³΄λ©΄ μ’κ² λ€ μΆμ΄μ μμ±νκ² λμλ€. π
null λ³ν© μ°μ°μ
μ°μ null λ³ν© μ°μ°μ(nullish coalescing) ??
μ κ°λ¨νκ² κ°μ΄ ν λΉλμ΄ μλ λ³μλ₯Ό μ½κ² μ°Ύμ μ μλ€.
μ¦ undefinedμ΄λ nullμ΄ μλ κ°μ΄ ν λΉλ κ²½μ°λ₯Ό λ§νλ€.
a ?? b
μ΄ μ°μ°μλ μμ κ°μ΄ μΈ μ μλλ°, μ΄λ° μμΌλ‘ ν΄μν μ μλ€.
- aκ° null λ μλκ³ undefinedκ° μλλΌλ©΄ a
- κ·Έ μΈ(nullμ΄λ undefined)μλ b
κ°μ λ°©μμ μΌν μ°μ°μλ‘ νμ΄μ¨λ³΄λ©΄ μ΄λ λ€.
let a = (a !== null && a !== undefined) ? a : b
null λ³ν© μ°μ°μλ₯Ό μ¬μ©νμ λ 무μ§νκ² μ§§μμ§λ κ²μ λ³Ό μ μλ€.
μ΄ μ°μ°μλ νΉνλ λ³μμ κΈ°λ³Έκ°μ μ€μ ν λ μ μ©νλ€.
null λ³ν© μ°μ°μκ° λμ
λκΈ° μ μλ λ
Όλ¦¬ μ°μ°μ ORμ λ»νλ ||
μ λ§μ΄ μ΄μ©νμκ³ , μ€μ λ‘ μ μμλ₯Ό ||
μ°μ°μλ‘ λ°κΎΈμ΄λ κ²°κ³Όλ λμΌνλ€.
const test = null ?? 'default';
const test2 = null || 'default';
μ°¨μ΄λ₯Ό λ€μλ©΄ ||
μ°μ°μμ κ²½μ° μΌμͺ½μ΄ Falsyν κ°μΌ κ²½μ° μ€λ₯Έμͺ½ κ°μ λ°ννκ³ ,
??
μ°μ°μμ κ²½μ° μΌμͺ½μ΄ null
μ΄λ undefined
λ‘ μ μλ κ²μ΄ μλλΌλ©΄ μ€λ₯Έμͺ½ κ°μ λ°ννλ€λ κ²μ΄λ€.
null
κ³Ό undefined
, μ«μ 0μ κ΅¬λΆ μ§μ΄ λ€λ€μΌ ν λ, 0μ Falsyν κ°μ΄κΈ° λλ¬Έμ ||
보λ€λ ??
κ° λμ± μ ν©νλ€κ³ νλ€.
μ΅μ λ 체μ΄λ μ°μ°μ
μ΅μ
λ 체μ΄λ μ°μ°μλ μ€μ²© κ°μ²΄μμ νλ‘νΌν°κ° null
μ΄λ undefined
κ° μλμ§ νμΈνκ±°λ μ°Έμ‘°κ° μ ν¨νμ§ νμΈν λ μ μ©νλ€.
a?.b
μΌμͺ½ μ°μ°μκ° null
μ΄κ±°λ undefined
μΈ κ²½μ° undefined
λ₯Ό λ°ννλ€.
κ·Έλ μ§ μλ€λ©΄ μ€λ₯Έμͺ½ νλ‘νΌν°μ μ°Έμ‘°λ₯Ό μ΄μ΄κ°λ€.
const elem = null;
const value = elem?.value;
μ μ½λλ₯Ό 보면 λ³μ valueλ λ³μ elemμ΄ null
μ΄κ±°λ undefined
μΈμ§ νμΈνκ³ μλ€.
보λ€μνΌ elemμ null
μ΄ ν λΉλμ΄ μκΈ° λλ¬Έμ undefined
λ₯Ό λ°ννλ€.
const elem = {
value: 'hello',
};
const value = elem?.value;
μ΄μ elemμ΄ κ°μ²΄λ‘ μ μΈλμκ³ valueλΌλ νλ‘νΌν°λ₯Ό κ°κ³ μκΈ° λλ¬Έμ κ°μ λ°ννλ κ²μ λ³Ό μ μλ€.
null λ³ν© μ°μ°μμ λΉμ·νκ² μ΄μ μλ λ
Όλ¦¬ μ°μ°μ &&
μ μ΄μ©ν΄μ λ³μκ° null
μ΄κ±°λ undefined
μΈ κ²½μ°λ₯Ό νμΈνλ λ°©λ²μ λ§μ΄ μ¬μ©νλ€. μμ Falsy ν κ²½μ°λ₯Ό λ°μ‘κΈ° λλ¬Έμ Falsy κ°μ ν΄λΉνλ 0
μ΄λ ''
λ₯Ό κ±°λ₯Ό μ μμλ€λ μ ..
const elem = null;
const value = elem && elem.value;
νμ§λ§ μ΅μ
λ 체μΈμ§ μ°μ°μλ Falsyν κ°μ΄λΌλ null
μ΄κ±°λ undefined
ν κ²½μ°λ₯Ό λ°λ‘ νμΈν μ μλ€!
μ°Έκ³
μ½μ΄ μλ°μ€ν¬λ¦½νΈ https://ko.javascript.info/nullish-coalescing-operator
MDN https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Optional_chaining
λͺ¨λ μλ°μ€ν¬λ¦½νΈ Deep Dive 9μ₯ 9.4.2, 9.4.3