느슨한 타입(loosely typed)의 동적(dynamic) 언어
어떤 특정 타입과 연결되지 않으며, 모든 타입의 값으로 할당 (및 재할당) 가능
타입 | 정의 | 종류 | 접근 | 원본데이터 변경 시 기존데이터 형태 |
---|---|---|---|---|
원시타입(Primitive Type) | 불변 값(변경할 수 없는 값) | 7가지 (Boolean, Null, Undefined, Number, BigInt, String, Symbol) | 변수 선언, 초기화, 할당 시 값이 저장된 메모리 영역에 직접적으로 접근(Access By Value) | 유지 |
참조 타입(ReferenceType) | 식별자로 참조할 수 있는 메모리 상의 값 | 원시값 외 모든 객체 | 변수가 가지고 있는 메모리 주소를 이용해서 변수의 값에 접근 | 변경 |
이 중에서 Null 타입과 Undefined 타입은 공통적으로 불변하는 원시타입이며 '없음' 을 표현합니다. 차이점은 무엇일까요?
Null | Undefined | |
---|---|---|
형태 | 리터럴(literal) | 전역변수 |
상태 | 빈 값을 할당 (no value) | 값을 할당하지 않음 (is not known) |
의도성 | O (빈 객체) | ✕ (자료형 없음) |
반환하는 경우 | 변수에 빈 객체를 할당 | 함수에서 return하지 않음 |
typeof() 의 결과 | object(원시타입) | undefinded |
undefined
== null
은 참(true)이다.null
이 할당된 변수는 빈 값이 할당되었으므로, null이 아니다let a; // undefined
let b = null; // nulldocument.writeln(a === null); // false
document.writeln(a === undefined); // true
document.writeln(b === null); // true
document.writeln(b === undefined); // false