반응형
특징
- JavaScript의 모든 Type은 원시타입(Primitive Type) 6개와 객체타입(Object Type) 1개로 총 7개 입니다.
- 원시타입은 불변적입니다.
- 원시 타입은 값(value)으로 저장, 객체들은 참조(reference)로 저장 됩니다.
- 어떠한 메소드를 가지고 있지 않습니다.
- Type을 알고 싶으면 typeof 를 쓰면 됩니다.
typeof null === 'object' 인 이유
- null은 원시타입 인데 객체 타입이라고 나타내고 있습니다.
- typeof가 검사하는 방식
1. undefined인지 검사
2. 해당 값이 객체 태그를 가졌는지 검사
3. 숫자, 문자, 참/거짓 검사
※ null에 대한 명시적인 검사는 없습니다.
1. undefined 인지 검사
2. 해당 값이 객체 태그를 가졌는지 검사
3. 숫자, 문자, 참/거짓 검사
※ null에 대한 명시적인 검사는 없습니다.
- 이 버그는 자바스크립트 첫 번째 버전의 버그입니다.
- ECMAScript에 수정을 요청했지만, 기존의 코드가 부정적인 영향을 끼칠 우려가 있어 거부되었습니다.
- 자세한 사항은 밑 링크를 참고
-
종류
typevalue
String | 모든 문자열 |
Number | 정수, 실수, NaN, infinity |
Boolean | true, false |
Null | null |
Undefined | undefined |
symbol | unique key |
※ symbol은 ES6 에서 새로 추가됨
null 과 undefined
- null과 undefined가 가질 수 있는 값은 위의 표와 같이 단 하나 뿐입니다.
- 둘은 모두 존재 하지 않는 것을 나타냅니다.
- null은 존재 하지않음 이라는 값
- undefined는 정의 되지않음 이라는 값
Symbol
- 유일한 토큰을 나타내기 위해 ES6에서 도입한 새 원시 타입(Primitive Type)입니다.
- 심볼은 항상 유일, 어떤 심볼과도 일치 하지 않습니다. (Object Type과 유사)
- 특징
1. symbol의 값을 외부에 노출시키지 않습니다.
2. 객체의 프로퍼티를 symbol로 만들면 Object.getOwnPropertyNames() 반환 값에서 제외됩니다.
3. value에 접근할 때는 []를 통해 접근해야 한다. .을 통해 접근하면 undefined가 반환됩니다.
Wrapper Object
- 원시 타입의 객체 형태입니다.
- 원시타입에서 new 키워드로 생성할 수 있습니다.
- Wrapper Object가 있기때문에 원시타입에서도 생성자 및 해당 메소드를 사용할 수 있습니다.
- Wrapper Object가 없는 원시타입도 있습니다. (null, undefined)
AutoBoxing
- 원시 타입(Primitive Type)이 생성자(constructor) 및 해당 메소드(method)를 쓸수 있는 이유
- 원시 타입(Primitive Type)에서 특정 property나 method를 호출하려고 할때 javascript는 임시로 Wrapper Object로 변환하여 접근 합니다.
정리
- 자바스크립트에서 타입은 6개의 원시타입(Primitive Type)과 1개의 객체타입(Object Type)으로만 이루어져 있습니다.
- 원시타입(Primitive Type)이 아닌 것은 모두 객체타입(Object Type)입니다.
- String, Number, Boolean, Symbol 은 원시타입이면서 객체입니다. (Wrapper Object)
- javascript 내부에서 동작하는 오토박싱(AutoBoxing) 기능 덕분에 몇몇 원시타입은 객체처럼 활용 할 수 있습니다.
반응형