Undefined vs null vs NaN

2025. 8. 12. 13:02ใ†Front-end/JavaScript

๋ฐ˜์‘ํ˜•

๋ชฉ์ฐจ

1. falsy๋“ค

2. null

3. undefined

4. NaN


1. falsy๋“ค

์ •ํ™•ํžˆ ๋ญ๊ฐ€ ๋‹ค๋ฅธ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ ์•„๋ฌดํŠผ ๊ฐœ๋ฐœ ์ค‘ ๋งŒ๋‚˜๊ณ  ์‹ถ์ง€๋Š” ์•Š์€ Undefind, null, NaN์ด ์žˆ๋‹ค.

 


0, null, undefind, NaN์„ ์„ค๋ช…ํ•˜๋Š” ๊ฑธ๋กœ ์œ ๋ช…ํ•œ ๋ฐˆ์ธ๋ฐ ์ด๊ฒƒ๋“ค์— ๋Œ€ํ•ด์„œ ๋” ์ž˜ ์•Œ์•„๋ณด์ž.

 

๊ฐ„๋‹จํ•œ ์š”์•ฝ ์„ค๋ช…

  null undefined NaN
์˜๋ฏธ ์˜๋„์ ์œผ๋กœ ๊ฐ’์ด ์—†์Œ ๊ฐ’์ด ์•„์ง ์ •์˜๋˜์ง€ ์•Š์Œ(์ดˆ๊ธฐํ™”x)
๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ(๋ฏธ์ •)
์ˆซ์ž๊ฐ€ ์•„๋‹˜
์ž๋ฃŒํ˜• object undefined number
์ฃผ ์‚ฌ์šฉ ์˜๋„ '๊ฐ’ ์—†์Œ'์„ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œํ˜„ ๊ฐ’์ด '์•„์ง ์„ค์ •๋˜์ง€ ์•Š์Œ'์„ ํ‘œํ˜„ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ '์œ ํšจํ•˜์ง€ ์•Š์Œ'์„ ํ‘œํ˜„

 


2. null

null์€ Null type์˜ ์œ ์ผํ•œ ๊ฐ’์œผ๋กœ, ์˜๋„์ ์ธ ๊ฐ์ฒด์˜ ๋ถ€์žฌ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. (absence of any object value)

1. ๋ฐœ์ƒ ์ƒํ™ฉ

๊ฐœ๋ฐœ์ž๊ฐ€ ์˜๋„์ ์œผ๋กœ ํ• ๋‹น let x = null;
DOM API ๋“ฑ์—์„œ ๊ฐ’ ์—†์Œ์„ ๋ฐ˜ํ™˜ document.querySelector('#id') → ํ•ด๋‹น id๊ฐ€ ๊ฐ€์ง€๋Š” ์š”์†Œ๊ฐ€ ์—†์œผ๋ฉด null ๋ฐ˜ํ™˜
ํ•จ์ˆ˜์—์„œ ์˜๋„์ ์œผ๋กœ ๋ฐ˜ํ™˜ return null;

 

 

2. JS ์—”์ง„ ๊ตฌํ˜„

  • ๋Œ€๋ถ€๋ถ„์˜ JS์—”์ง„์—์„œ ํŠน์ˆ˜ ๋น„ํŠธ ํŒจํ„ด์œผ๋กœ ํ‘œํ˜„
    • ํƒ€์ž… ํƒœ๊ทธ(์ƒ์œ„ ๋น„ํŠธ) : Null type
    • ์‹ค์ œ ๊ฐ’(ํ•˜์œ„ ๋น„ํŠธ) : 0x0 (null pointer)
  • ๋‚ด๋ถ€์ ์œผ๋กœ null์€ 0x00(null pointer)๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๋นˆ ์ฐธ์กฐ๋กœ ์ฒ˜๋ฆฌ๋จ
    → typeof์—์„œ object๋กœ ๋ถ„๋ฅ˜๋˜๋Š” ๋ฒ„๊ทธ์˜ ์ด์œ 

 


3. undefined

undefined๋Š” Undefined type์˜ ์œ ์ผํ•œ ๊ฐ’์œผ๋กœ, ๊ฐ’์ด ์•„์ง ์ •์˜๋˜์ง€ ์•Š์Œ, ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

1. ๋ฐœ์ƒ ์ƒํ™ฉ

์„ ์–ธ๋งŒ ํ•˜๊ณ  ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์Œ let a;
์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผ obj.noSuchKey
๋ฐ˜ํ™˜๊ฐ’์ด ์—†๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ function ex() { };
ex();
๋ฐฐ์—ด์—์„œ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์ธ๋ฑ์Šค์— ์ ‘๊ทผ const arr[1, 2];
let x = arr[2];

 

2. JS ์—”์ง„ ๊ตฌํ˜„

  • ๋Œ€๋ถ€๋ถ„์˜ JS์—”์ง„์—์„œ ํŠน์ˆ˜ ๋น„ํŠธ ํŒจํ„ด์œผ๋กœ ํ‘œํ˜„
    • ํƒ€์ž… ํƒœ๊ทธ(์ƒ์œ„ ๋น„ํŠธ) : Undefined type
    • ์‹ค์ œ ๊ฐ’(ํ•˜์œ„ ๋น„ํŠธ) : 0x0
  • undefined๋ฅผ ์ „์—ญ์ ์œผ๋กœ ๋‹จ ํ•˜๋‚˜์˜ ์ƒ์ˆ˜ ๊ฐ’์œผ๋กœ ์œ ์ง€ํ•œ๋‹ค.
    • JS์—”์ง„์ด ์‹คํ–‰๋  ๋•Œ, undefined๊ฐ’์€ ์˜ค์ง ํ•˜๋‚˜๋งŒ ์กด์žฌํ•œ๋‹ค.
    • ๋งค๋ฒˆ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฐ’์ด ์•„๋‹ˆ๋ผ, ๋ฏธ๋ฆฌ ์ค€๋น„๋œ ํ•˜๋‚˜์˜ ๊ณ ์ •๊ฐ’์ด๋‹ค.
let a;
let b;
console.log(a === b);	// true, a์™€ b๋Š” ๊ฐ™์€ ์ƒ์ˆ˜๊ฐ’ undefined๋ฅผ ๊ฐ€๋ฆฌํ‚ด
  • undefined ์‹๋ณ„์ž๋Š” ์ „์—ญ ๊ฐ์ฒด(globalThis)์˜ ์ฝ๊ธฐ ์ „์šฉ ํ”„๋กœํผํ‹ฐ๋‹ค.
    • ์ „์—ญ ๊ฐ์ฒด = ๋ธŒ๋ผ์šฐ์ €์˜ window = node.js์˜ global = globalThis(ํ†ต์ผ)๋กœ,
      JS ์ „์—ญ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  builtin value(Array, Math, NaN, undefined ๋“ฑ)์ด ๋“ค์–ด์žˆ๋‹ค.
console.log(globalThis.undefined);    // undefined
console.log(undefined);    // undefined, ์œ„์˜ ์ ‘๊ทผ๊ณผ ๊ฐ™๋‹ค

 

3. ๋ณ€ํ™˜/๋น„๊ต

๋ณ€ํ™˜/๋น„๊ต ๊ฒฐ๊ณผ
typeof undefined "undefined"
Boolean(undefined) false
Number(undefined) NaN
String(undefined) "undefined"
undefined == null true
undefined === null false
undefined.foo typeEror

 


4. NaN

Not a Number์˜ ์•ฝ์ž๋กœ, ์ˆซ์ž๊ฐ€ ์•„๋‹˜์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

Number type์— ์†ํ•˜๋Š” ํŠน์ˆ˜ํ•œ ์ˆซ์ž ๊ฐ’์ด๋‹ค.

 

1. ๋ฐœ์ƒ ์ƒํ™ฉ

0์„ 0์œผ๋กœ ๋‚˜๋ˆŒ ๋•Œ 0 / 0
์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฐ’์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ ์‹œ Number("abc")
๋ถ€์ ์ ˆํ•œ ์‚ฐ์ˆ  ์—ฐ์‚ฐ Math.sqrt(-1)
์ •์˜๋˜์ง€ ์•Š์€ ์ˆ˜ํ•™ ํ•จ์ˆ˜ ๊ฒฐ๊ณผ parseInt("foo")
ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ NaN์ผ ๋•Œ NaN + 5

 

2. JS ์—”์ง„ ๊ตฌํ˜„

  • ๋Œ€๋ถ€๋ถ„์˜ JS์—”์ง„์—์„œ ํŠน์ˆ˜ ๋น„ํŠธ ํŒจํ„ด์œผ๋กœ ํ‘œํ˜„
    • ํƒ€์ž… ํƒœ๊ทธ(์ƒ์œ„ ๋น„ํŠธ) : Number type
    • ์‹ค์ œ ๊ฐ’(ํ•˜์œ„ ๋น„ํŠธ) : IEEE 754 64๋น„ํŠธ ์ด์ค‘์ •๋ฐ€๋„ ๋ถ€๋™์†Œ์ˆ˜์ ์— ๋”ฐ๋ฅธ NaN ๋น„ํŠธ ํŒจํ„ด
      → 11๋น„ํŠธ์˜ ์ง€์ˆ˜๋ถ€๊ฐ€ ๋ชจ๋‘ 1์ด๊ณ , 52๋น„ํŠธ์˜ ๊ฐ€์ˆ˜๋ถ€๊ฐ€ 0์ด ์•„๋‹˜ (๊ฐ€์ˆ˜๋ถ€๊ฐ€ 0์ด๋ฉด Infinity)

 

 

3. ๋ณ€ํ™˜/๋น„๊ต

์—ฐ์‚ฐ/๋ณ€ํ™˜ ๊ฒฐ๊ณผ ์„ค๋ช…

   
typeof NaN "number"
Boolean(NaN) false
Number(NaN) NaN
String(NaN) "NaN"
NaN == NaN false
NaN === NaN false
isNaN(NaN) true
Number.isNaN(NaN) true
NaN != NaN true
NaN !== NaN true

 

 

์ฐธ๊ณ 

๋”๋ณด๊ธฐ

https://velog.io/@ehrud1031/NaN-vs-null-vs-undefined

 

NaN vs null vs undefined

undefined,null,nan์˜ ์ฐจ์ด์— ๋Œ€ํ•ด์„œ ๊ฐ™์ด ๋ธ”๋กœ๊น… ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ํ•ด์„ํ•˜์—ฌ ์ถœ๋ ฅ๋œ ๊ฐ’์ด๋‹ค๋ฌธ์ž์—ด์„ number๋กœ ๋ฐ”๊พธ๋ ค๊ณ  ํ•˜๋ฉด Nan์ด ๋‚˜์˜จ๋‹ค.๊ทธ๋ ‡๋‹ค๋ฉด isNaN์€? ์–ด๋–ค ๊ฐ’์ด NaN์ธ์ง€ ํŒ

velog.io

https://inpa.tistory.com/entry/%F0%9F%93%9A-null-undefined-NaN

 

[JS] ๐Ÿ“š ์žฌ๋ฏธ์žˆ๊ฒŒ ํ™•์‹คํžˆ ์ดํ•ดํ•˜๋Š” null / undefined / NaN ์ฐจ์ด

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ์š”์ƒํ•œ falsy ๊ฐ’ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ null, NaN, undefined๋Š” ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—๋Š” ์—†๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋งŒ ์žˆ๋Š” ์š”์ƒํ•œ falsy ๊ฐ’์œผ๋กœ์„œ, ์ด๋“ค์€ ๋ชจ๋‘ ๊ฐ’์ด ์—†์Œ(falsy)์„ ๋‚˜ํƒ€๋‚ด๋Š” ํŠน๋ณ„

inpa.tistory.com

https://2ality.com/2013/10/typeof-null.html

 

The history of “typeof null”

The history of “typeof null” (Ad, please don’t block) Update 2013-11-05: I take a look at the C code of typeof to better explain why typeof null results in 'object'. In JavaScript, typeof null is 'object', which incorrectly suggests that null is an o

2ality.com

https://2ality.com/2013/04/quirk-undefined.html

 

JavaScript quirk 2: two “non-values” – undefined and null

JavaScript quirk 2: two “non-values” – undefined and null (Ad, please don’t block) [This post is part of a series on JavaScript quirks.] Most programming languages have only one value for “no value” or “empty reference”. For example, that v

2ality.com

https://anstrengung-jh.tistory.com/103

 

null๊ณผ undefined์— ๊ด€ํ•œ ๊ณ ์ฐฐ

null๊ณผ undefined์˜ ์ฐจ์ด๋Š” ์ด๋ฏธ ์•Œ๊ณ ์žˆ์—ˆ์ง€๋งŒ ํ˜„์žฌ ์ง„ํ–‰ํ•˜๊ณ ์žˆ๋Š” ASAP(์ตœ์ ์˜ ํšŒ์˜์‹œ๊ฐ„ ๋„์ถœ ์„œ๋น„์Šค)์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ์ง„ํ–‰ํ•˜๋˜ ์ค‘ ํŒ€์›์ด stringํƒ€์ž…์ธ ์‹œ์ž‘์‹œ๊ฐ„์„ undefined๋กœ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ์•ˆ๋˜๋Š” ์ด

anstrengung-jh.tistory.com

 

๋ฐ˜์‘ํ˜•