JavaScript에는 6개의 primitive type과 1개의 object type으로 총 7개의 data type을 가지고 있습니다.
숫자 1과 문자 '1'을 출력하면 그 결과에는 차이가 없다고 느껴질 수 있습니다.
하지만 아래와 같은 차이점들이 있습니다.
코드를 작성함에 있어 이런 타입을 명확히 알고 의도대로 활용할 필요가 있습니다.
JavaScript는 정수, 실수, 양수, 음수 등을 가리지 않고 하나의 number
타입으로 사용합니다.
number
타입은 64비트 부동소수점 형식을 따르기 때문에 사실 모든 값이 10진수 실수로 해석됩니다.
code>
var bin = 0b1010;
var oct = 0o012;
var hex = 0x0a;
var num = 10;
console.log(bin);
console.log(oct);
console.log(hex);
console.log(num);
result>
10
10
10
10
또한 number
타입은 아래와 같은 값도 표현이 가능합니다.
code>
var postiveInf = 1 / 0;
var negativeInf = -1 / 0;
var nan = 1 * "a";
console.log(postiveInf);
console.log(negativeInf);
console.log(nan);
result>
Infinity
-Infinity
NaN
문자열 데이터를 나타내기 위한 타입입니다.
큰 따옴표, 작은 따옴표, 백틱으로 감싼 텍스트를 string
타입으로 인식합니다.
큰 따옴표 내부의 작은 따옴표나, 작은 따옴표 내부의 큰 따옴표도 문자열로 인식합니다.
일반적으로 작은 따옴표를 사용해서 string
타입을 나타냅니다.
code>
var str1 = "this ";
var str2 = 'is ';
var str3 = `string type`;
console.log(str1 + str2 + str3);
var text = 'this is "string" type';
console.log(text);
result>
this is string type
this is "string" type
ECMAScript6부터는 template literal이라는 개념도 추가되었습니다.
백틱을 통해 멀티라인, 표현식 삽입 등의 기능을 적용할 수 있습니다.
code>
var name = 'nick';
var text = `Hi,
I'm ${name}`;
console.log(text);
result>
Hi,
I'm nick
논리적 참, 거짓을 나타내기 위한 타입입니다.
code>
var isWeb = true;
console.log(isWeb);
isWeb = false;
console.log(isWeb);
result>
true
false
undefined
타입을 undefined
라는 값만 가지는 타입입니다.
변수에 관련된 포스트에서 언급했듯 변수 선언 시 초기화하기 위한 값입니다.
code>
var sample;
console.log(sample);
result>
undefined
null
타입도 null
이라는 값만 가지는 타입입니다.
위에서 언급한 undefined
는 값이 할당되지 않은 변수를 참조할 때 읽게 되는 값인 것에 비해
null
은 의도적으로 참조를 제거할 때 사용합니다.
code>
var sample = null;
console.log(sample);
result>
null
Symbol
은 변경 불가능하고 다른 값과 중복되지 않는 값을 가지는 타입입니다.
이름의 충돌을 방지하기 위해 객체의 유일한 프로퍼티 키를 만들기 위해 사용됩니다.
ES6에서 추가되었으며, Symbol()
함수 호출을 통해 생성합니다.
JavaScript는 객체 기반의 언어이며, 거의 모든 것이 객체로 이루어져 있습니다.
위에서 언급했던 Primitive type을 제외하고 모든 타입은 Object type입니다.
기존에 C, C++ 등을 통해 변수를 선언 시, 변수의 타입을 지정해 주었습니다.
하지만 JavaScript는 변수 선언 시 타입을 지정하지 않습니다.
변수에는 모든 타입의 값이 할당될 수 있고, 할당되는 값의 타입에 따라 동적으로 변수의 타입이 결정됩니다.
이는 기존 변수에 다른 타입의 값이 재할당되면 변수의 타입도 바뀐다는 점을 의미합니다.
code>
var sample = 1;
console.log(typeof(sample));
sample = "str";
console.log(typeof(sample));
sample = true;
console.log(typeof(sample));
sample = null;
console.log(typeof(sample));
sample = Symbol();
console.log(typeof(sample));
result>
number
string
boolean
object
symbol