데이터 타입
Javascript Data type
자바스크립트는 크게 2가지의 데이터 타입으로 나뉜다.
원시타입 (Primitive Data Type)
객체타입 (Object Type, Reference Type)
이 중에서도 원시타입에는 6가지의 타입이 존재하고 그 외의 것들은 모두 객체타입이다. 그래서 자바스크립트를 객체 지향 프로그래밍 언어라고 부르나 보다.(6가지 빼곤 모두 객체니깐…)
오늘은 데이터 타입에 대해 공부해보도록 하자.
Primitive Data Type (원시타입)
원시타입의 종류는 6가지가 있다.
- number (숫자형)
- string (문자형)
- undefined
- null
- boolean (불리언형)
- symbol
원시 타입의 값은 변경 불가능한 값이며, pass-by-value(값에 의한 전달)이다. 이에 대한 자세한 내용은 다음 TIL에서 더 알아보고 각 자료형에 대해 알아보자.
number
Javascript에서는 숫자형을 모두 실수로 처리한다. 추가로 아래와 같은 자료도 숫자형이다.
- Infinity : 양의 무한대
- -Infinity : 음의 무한대
- NaN : 산술 연산 불가(Not A Number)
NaN은 자기 자신과 일치하지 않는 유일한 값이다. 그러므로 어떤 값이 NaN인지 판단하기 위해서는 Number.isNaN() 빌트인 함수를 사용하거나 Object.is() 메서드를 사용하여야 한다.
1 | NaN === NaN; // false |
string
C언어와 다르게 Javascript의 문자열은 원시타입으로 변경 불가능하다.
1 | var str = "Hello"; |
위 코드에서 str 변수에 ‘World’라는 문자열로 데이터를 수정하는 것이 아니다.
임의의 메모리 주소를 갖는 메모리 공간에 ‘World’라는 문자열을 저장하고 변수의 식별자인 str이 새로운 메모리 주소를 가리켜 변수를 재할당하는 것이다.
boolean
참, 거짓을 나타내는 자료형이다. 암묵적 불리언 형변환이 발생하면 해당값들을 false로 바꿔주는 falsy 값들이 있다.
falsy
- “” (빈문자열)
- undefined
- null
- 0, -0
- NaN
undefined
변수의 선언 단계는 사실 선언단계와 초기화 단계 두 단계로 나눠서 볼 수 있는데, 초기화 단계에서 컴퓨터가 변수가 할당되기 이전에 undefined값으로 변수의 값을 초기화해준다.
때문에 이는 개발자의 의도가 담긴 것이 아니다.
null
변수의 값이 없다는 것에 개발자의 의도를 담고 싶다면 null을 사용한다. 자바스크립트는 대소문자를 구별하기 때문에 null, Null, NULL 모두 다른 값이다.
함수가 유효한 값을 반환할 수 없는 경우 명시적을 null을 반환하기도 한다.
null 값의 type을 확인하기 위해서는 typeof 연산자를 사용하는 것 대신 일치 연산자(===)를 사용한다.
1 | var foo = null; |
symbol
심볼은 이름이 충돌한 위험이 없는 유일무이한 원시타입의 값이다. 주로 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.
1 | var key = Symbol("key"); |
Object Type, Reference Type (객체타입)
객체란, 데이터와 그 데이터에 관련된 동작(절차, 방법, 기능 등)을 모두 포함할 수 있는 개념적 존재이다.
다시말해 데이터를 의미하는 프로퍼티와 동작을 의미하는 메소드를 포함할 수 있는 독립적 주체이다.
원시타입을 제외한 나머지 값(배열, 함수, 정규표현식 등)이 모두 객체이다.
객체는 pass-by-reference (참조에 의한 전달)이다. 이 부분에 대해서는 후에 객체에 대해서 TIL 작성시 다뤄보자
소감
모던 자바스크립트 Deep Dive 책을 읽으면서 그전에 포이마 웹을 통해 공부했을 때 놓쳤던 부분까지 꼼꼼하게 이해하고 넘어갈 수 있어서 재밌는 시간이었다.
매일 매일 조금씩 읽은 것들에 대해 하나의 주제를 잡고 정리해보는 습관을 가져봐야겠다.