본문 바로가기
Language/JavaScript

[JS] undefined, null

by 오우영 2021. 6. 24.
undefined은 변수를 선언하고 값을 할당하지 않은 상태
null은 변수를 선언하고 빈 값을 할당한 상태
즉, undefined는 자료형이 없는 상태 (독립 자료형이 존재)
자료형
1. 숫자형 – 정수, 부동 소수점 숫자 등의 숫자를 나타낼 때 사용합니다. 정수의 한계는 ±253 입니다
2. bigint – 길이 제약 없이 정수를 나타낼 수 있습니다
3. 문자형 – 빈 문자열이나 글자들로 이뤄진 문자열을 나타낼 때 사용합니다. 단일 문자를 나타내는 별도의 자료형은 없습니다
4. 불린형 – true, false를 나타낼 때 사용합니다
5. null – null 값만을 위한 독립 자료형입니다. null은 알 수 없는 값을 나타냅니다
6. undefined – undefined 값만을 위한 독립 자료형입니다. undefined는 할당되지 않은 값을 나타냅니다
7. 객체형 – 복잡한 데이터 구조를 표현할 때 사용합니다
8. 심볼형 – 객체의 고유 식별자를 만들 때 사용합니다

 

typeof null // 'object'
typeof undefined // 'undefined'
null === undefined // false
null == undefined // true
null === null // true
null == null // true
!null // true
isNaN(1 + null) // false
isNaN(1 + undefined) // true

 

isNaN
매개변수가 숫자인지 검사하는 함수

 

undefined


undefined는 원시값(Primitive Type)으로, 선언한 후에 값을 할당하지 않은 변수값이 주어지지 않은 인수에 자동으로 할당된다. 이 값은 전역 객체의 속성 중 하나로, 전역 스코프에서의 변수이기도 하다. 따라서 undefined 변수의 초기 값은 undefined 원시 값이다

 

undefined는 예약어가 아니기 때문에, 전역 범위 외에서 변수 이름으로 사용할 수 있다. 그러나 유지보수와 디버깅에 어려움을 겪을 수 있으므로 피하는 것이 좋다
예약어
특별한 의미를 가지고 있어, 변수나 함수명 등으로 사용 할 수 없는 단어
abstract arguments await* boolean
break byte case catch
char class* const continue
debugger default delete do
double else enum* eval
export* extends* false final
finally float for function
goto if implements import*
in instanceof int interface
let* long native new
null package private protected
public return short static
super* switch synchronized this
throw throws transient true
try typeof var void
volatile while with yield

 

변수가 undefined를 반환하는 경우
1. 값을 할당하지 않은 변수
2. 메서드와 선언에서 변수가 할당받지 않은 경우
3. 함수가 값을 return 하지 않았을 때

 

null


null은 원시값(Primitive Type) 중 하나로, 어떤 값이 의도적으로 비어있음을 표현한다. undefined는 값이 지정되지 않은 경우를 의미하지만, null의 경우에는 해당 변수가 어떤 객체도 가리키고 있지 않다는 것을 의미한다

null은 undefined처럼 전역 객체의 속성 중 하나가 아니라 리터럴 값이다
상수와 리터럴
상수와 리터럴 둘 다, 변하지 않는 값(데이터)를 의미한다
상수는 변하지 않는 변수를 뜻한다 (숫자만 넣는게 아님)
리터럴은 데이터 그 자체를 뜻한다
변수에 넣는 변하지 않는 데이터를 의미하는 것이다

 

let a = 1;
a는 상수이고 리터럴은 1이다

 

typeof null은 출력하면 object이다. 하지만 이는 여전히 원시 타입으로, JavaScript에서는 구현 버그로 간주한다

'Language > JavaScript' 카테고리의 다른 글

[JS] 호이스팅이란?  (0) 2021.07.07
[JS] Promise란?  (0) 2021.07.02
[JS] Iterable object, Array-like object  (0) 2021.06.23
[JS] ES6 특징  (0) 2021.06.22
[JS] 프로토타입과 클래스  (0) 2021.02.26

댓글