Skip to content

Latest commit

Β 

History

History
96 lines (66 loc) Β· 3.31 KB

File metadata and controls

96 lines (66 loc) Β· 3.31 KB

undefined vs null vs undeclared λ³€μˆ˜

undefined

  • μ„ μ–Έλ˜μ§€ μ•Šμ•˜μ„ 경우
console.log(typeof v) // undefined
  • λ³€μˆ˜κ°€ μ„ μ–Έλ˜μ—ˆμœΌλ‚˜, 할당은 λ˜μ§€ μ•Šμ•˜μ„ 경우, μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ μžλ™μœΌλ‘œ ν• λ‹Ήλ˜λŠ” 값이닀.
let a;
console.log(a); // undefined
console.log(typeof a); //undefined

null

  • μ–΄λ– ν•œ 참쑰값도 μ‘΄μž¬ν•˜μ§€ μ•ŠμŒμ„ μ˜λ―Έν•œλ‹€.
  • 객체 참쑰의 연결을 ν•΄μ§€ν•˜λŠ” 것을 λ§ν•œλ‹€.
let b = null;
console.log(b); // null
console.log(typeof b); // Object

null, undefined 검증

μ„ μ–Έλ˜μ§€ μ•Šμ€ λ³€μˆ˜λŠ” undefinedμ΄λ‚˜, μ„ μ–Έλ˜μ§€ μ•Šμ€ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 문법 였λ₯˜μ΄λ‹€.

console.log(null == undefined); // true
console.log(null === undefined); // false
console.log(qwer == undefined); // ReferenceError: qwer is not defined

undeclared λ³€μˆ˜

  • μ „μ—­ μŠ€μ½”ν”„

undeclared λ³€μˆ˜λž€ μ„ μ–Έν•˜μ§€ μ•Šμ€ λ³€μˆ˜λ‘œ, μ–΄λ– ν•œ ν‚€μ›Œλ“œλ„ μ§€μ •ν•˜μ§€ μ•Šμ€ λ³€μˆ˜μ΄λ‹€. ν‚€μ›Œλ“œλ₯Ό μ§€μ •ν•˜μ—¬ λ³€μˆ˜λ₯Ό μ„ μ–Έν•˜λŠ” 것은, κ·Έ λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„λ₯Ό μ§€μ •ν•˜λŠ” 것 이닀. undeclared λ³€μˆ˜λŠ” μœ νš¨λ²”μœ„λ₯Ό μ§€μ •ν•˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ, μ–΄λ–€ scopeμ—μ„œ 선언을 ν–ˆλ˜μ§€κ°„μ—, μ „μ—­ 객체의 ν”„λ‘œνΌν‹°κ°€ λœλ‹€.

ν‚€μ›Œλ“œλ₯Ό μ§€μ •ν•˜μ—¬, λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„λ₯Ό μ§€μ •ν•œ declared λ³€μˆ˜μ™€ λΉ„κ΅ν•΄λ³΄μž. var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λŠ” ν•¨μˆ˜ λ²”μœ„ μŠ€μ½”ν”„λ₯Ό κ°–κΈ° λ•Œλ¬Έμ—, μ„ μ–Έλœ ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ μ°Έμ‘°ν•  수 μžˆλ‹€. μ „μ—­ μŠ€μ½”ν”„μ—μ„œ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λ €κ³  ν•˜λ©΄ μ—λŸ¬κ°€ λ°œμƒν•œλ‹€.

function func() {
  var varKeyword = "var 둜 μ„ μ–Έλœ λ³€μˆ˜";
  console.log(varKeyword); // var 둜 μ„ μ–Έλœ λ³€μˆ˜
}

func();
console.log(varKeyword); // ReferenceError: varKeyword is not defined

μ„ μ–Έν•˜μ§€ μ•Šμ€ λ³€μˆ˜λŠ” μ „μ—­ λ³€μˆ˜μ΄λ―€λ‘œ, μ „μ—­ μŠ€μ½”ν”„μ—μ„œ μ„ μ–Έλ˜μ§€ μ•Šμ€ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μžˆλ‹€.

function fn() {
  undeclared = "μ„ μ–Έλ˜μ§€ μ•Šμ€ λ³€μˆ˜";
}

fn();
console.log(undeclared); // μ„ μ–Έλ˜μ§€ μ•Šμ€ λ³€μˆ˜
  • undeclared λ³€μˆ˜λŠ” 할당문을 λ§Œλ‚˜κΈ° 전에 μ°Έμ‘°ν•˜λ €κ³  ν•˜λ©΄, 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

    console.log(undc); // ReferenceError: undc is not defined
    undc = "μ„ μ–Έλ˜μ§€ μ•Šμ€ λ³€μˆ˜";
    

정리

undefinedλŠ” κ·Έ λ³€μˆ˜κ°€ μ°Έμ‘°ν•˜λŠ” 객체λ₯Ό 아직 μ§€μ •ν•˜μ§€ μ•Šμ•˜μŒμ„ λœ»ν•œλ‹€. undefinedλ₯Ό κ°–λŠ” λ³€μˆ˜κ°€ 할당을 톡해 값을 κ°–κ²Œ 되고, 이 값을 ν•΄μ œν•  λ•Œ, null이 λœλ‹€.

let value; // ν• λ‹Ήλ°›μ§€ μ•Šμ€ λ³€μˆ˜λŠ” μžλ™μœΌλ‘œ undefined
console.log(value); // undefined

value = "value"; // λ¬Έμžμ—΄μ„ ν• λ‹Ή 
console.log(value); // value;

value = null; // λ¬Έμžμ—΄ 객체λ₯Ό ν•΄μ œν•˜μ˜€μœΌλ―€λ‘œ null
console.log(value); // null

좜처