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 ๋ฑ)์ด ๋ค์ด์๋ค.
- ์ ์ญ ๊ฐ์ฒด = ๋ธ๋ผ์ฐ์ ์ window = node.js์ global = globalThis(ํต์ผ)๋ก,
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
'Front-end > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| B8 : ๋ฐ๋ณต๋ฌธ (2) | 2025.08.14 |
|---|---|
| [WIP] defer ๐ async ๐ DOMContentLoaded (1) | 2025.08.14 |
| JS์์ง์ด ํํ์๊ณผ ๋ฌธ์ ๊ตฌ๋ถํ๋ ๋ฒ (3) | 2025.08.12 |
| B7 : ์กฐ๊ฑด๋ฌธ (3) | 2025.08.12 |
| B6 : ๊ตฌ๋ฌธ๊ณผ ์ฐ์ฐ์ (9) | 2025.08.11 |
GitHub