꾸준한 개발자

계속적인 성장을 추구하는 개발자입니다. 꾸준함을 추구합니다.

계속 쓰는 개발 노트

JAVASCRIPT/자바스크립트 이론

타입이란

gold_dragon 2021. 2. 16. 15:22

타입

자바스크립트의 모든 값은 데이터 타입을 갖습니다. 타입이란 자바스크립트 엔진, 개발자 모두에게 어떤 값을 다른 값과 분별할 수 있는, 고유한 내부 특성의 집합입니다. 예를 들어 자바스크립트 엔진과 개발자가 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