본문 바로가기
프로그래밍/JavaScript

[javascript] 타입 : 내장 타입 7가지 / 변수에는 타입이 없다.

by 소소로드 2020. 11. 30.

- 타입

자바스크립트 같은 동적 언어에 타입(어떤 값을 다른 값과 분별할 수 있는 고유한 내부 특성의 집합)이 없다고 생각한다면 금물. 타입의 실체를 이해해야 한다.

1.1 내장 타입 7가지

자바스크립트에는 다음 7가지 내장 타입이 있다.

null / undefined / boolean / number / string / object / symbol(ES6부터 추가)
=> object를 제외하고는 원시타입이라고 부른다.

 typeof undefined == "undefined" //true
 typeof true == "boolean" //true
 typeof 42 == "number" //true
 typeof "42" == "string" //true
 typeof {life:42} == "object" //true
 typeof Symbol() == "symbol" //true

이렇게 typeof 연산자로 반환했을때 7가지 내장 타입중에 6가지는 바르게 작동한다.

typeof null == "object" //true

그런데 null에 대한 타입은 왜 이럴까..? 상식으로는 null타입이어야하는데 말이다!

이건 일종의 버그이다. 갑자기 바꾸면 웹 소프트웨어가 멈춰버릴 수도 있다.

 var a = null;
 (!a && typeof a == "object"); //true

그래서 null 값을 타입으로 정확히 확인하려면 이렇게 바꿔야 한다.

오호, null값을 가진 a를 부정하면 true가 된다는 걸 처음알았다.

 

1.2 변수에는 타입이 없다.

자바스크립트는 타입 강제를 하지 않는다. 값에는 타입이 있으나, 변수에는 타입이 없다.

이 말은 변수는 언제라도 변할 수 있다는 뜻이다.

예를 들어, 자바에서는 int a = 42이고, a는 int타입이므로 오로지 숫자만 가지게 된다. 자바스크립트는 어떨까.

var a = 42;에서 a의 타입은 number일텐데, a = true;를 할당하면 a의 타입은 boolean이 된다. 


요약

1. typeof 연산자에서 null은 null타입이 아니라 object타입을 반환한다. (버그)

2. null값을 가진 변수를 부정하면 true가 된다.

3. 자바스크립트는 타입 강제를 하지 않는다. 값에는 타입이 있으나, 변수에는 타입이 없다.

 

출처 : 타입과 문법, 스코프와 클로저
you don't know js