타입
자바스크립트의 모든 값은 데이터 타입을 갖습니다. 타입이란 자바스크립트 엔진, 개발자 모두에게 어떤 값을 다른 값과 분별할 수 있는, 고유한 내부 특성의 집합입니다. 예를 들어 자바스크립트 엔진과 개발자가 10(숫자)이란 값을 '10'(문자열)이란 값과 다르게 취급한다면 두 값은 타입이 서로 다릅니다. 숫자 10은 계산을 하려는 의도지만 문자열 10은 글을 쓰는 페이지에 출력할 문자열로 쓸 의도로 만든 값입니다.
이런 타입의 특성을 제대로 파악해두어야 자바스크립트의 암묵적 타입 변환과 같은 방법을 정확히 이해할 수 있습니다.
내장 타입
자바스크립트는 7가지 내장 타입이 있습니다. 그리고 그 내장 타입은 원시타입과 객체 타입으로 나뉘어집니다.
- 원시 타입
- undefined
- boolean
- number
- string
- symbol (ES6에서 추가된 7번째 타입)
- 객체 타입
- object (객체, 함수, 배열 등)
값 타입을 확인하고 싶다면 typeof 연산자를 통해 확인할 수 있습니다.(추가적으로 typeof로 반환된 값은 문자열입니다.) 그런데 null은 예외적입니다. typeof 연산자로 타입을 확인하면 object로 나옵니다. 하나의 버그로 현재 20년 동안 이어져오고 있으며, 버그를 수정하기엔 상용화되고 있는 많은 웹 소프트웨어가 멈출 수 있기 때문에 해결될 가능성이 없다고 합니다.
null은 falsy한 값이지만 타입은 object인 특이한 값입니다. 그래서 null 값을 정확히 확인하기 위해서는 아래와 같은 방법을 사용할 수 있습니다.
const x = null;
(!x && typeof x === 'object'); // true
또한 typeof 연산자는 function을 반환하기도 합니다. 이는 function이 최상위 레벨의 내장 타입으로 오해할 수 있습니다. function은 object의 하위 타입입니다.
자바스크립트 변수
자바스크립트 변수는 따로 타입이 없습니다. 이 변수에 저장되는 값에 따라 number 타입을 가질 수 있고, string 타입을 가질 수도 있습니다.
let a;
console.log(typeof a); // undefined
a = 10;
console.log(typeof a); // number
a = '10';
console.log(typeof a); // string
undefined vs undeclared
undefined는 접근 가능한 스코프에 변수가 선언이 됐으며, 현재 아무런 값도 할당되지 않은 상태입니다. 반면 undeclared는 접근 가능한 스코프에 변수 자체가 선언조차 되지 않은 상태입니다.
let a;
console.log(a); // undefined
console.log(b); // b is not defined
그런데 선언되지 않은 b에 typeof 연산자를 사용하게 되면 오류가 발생하지 않습니다. 카일 심슨의 'you don't know js'에서는 typeof만의 독특한 안전 가드라고 설명돼 있습니다.
👍참조
카일 심슨의 'YOU DON'T KNOW JS'
이웅재 강사님의 poiemaweb
'JAVASCRIPT > 자바스크립트 이론' 카테고리의 다른 글
this (0) | 2022.11.22 |
---|---|
원시타입과 참조타입 (Primitive type & Reference type) (0) | 2022.11.21 |
currying이란 (0) | 2021.02.05 |
REST API란 (2) | 2021.02.03 |
oAuth란 (0) | 2021.02.02 |