[JavaScript] 데이터 타입(자료형) 종류
Lpla
·2021. 3. 13. 21:43
자바스크립트의 모든 값은 데이터 타입을 갖는다.
- 숫자(number)
- 문자(string)
- 불리언(boolean)
- 널(null)
- 정의되지않음(undefined)
- 심볼(symbol) : ES6에서 추가됨
- 객체(object)
1. 숫자(number)
자바스크립트의 숫자 타입은 배정밀도 부동소수점을 따른다.
여기서 생기는 문제점은 다음과 같다.
console.log(0.1 + 0.2 == 0.3);
// false
0.1+0.2가 0.3과 동일한지 확인했을 때 false를 출력한다.
console.log(0.1 + 0.2);
// 0.30000000000000004
실제 자바스크립트에서 0.1+0.2는 0.30000000000000004이다.
만약 정확한 계산이 필요한 작업이라면 이대로 값을 반환해선 안된다.
어떻게 해야 이 문제를 해결할 수 있을까?
console.log((0.1 + 0.2).toFixed(1));
// 0.3
console.log((0.1 + 0.2).toFixed(3));
// 0.300
가장 일반적인 방법은 .toFixed
메서드를 사용해서 지정 소수점 자리까지 출력하는 것이다.
단, 이 방법으로 반환된 값은 숫자 타입이 아닌 문자 타입이 된다.
var sum = 0.1 + 0.2
console.log(typeof sum.toFixed(2));
// string
toFixed
를 사용하더라도 숫자 타입을 반환하고 싶다면 숫자 앞에 부호(+, -)를 붙이면 된다.
var sum = 0.1 + 0.2
console.log(typeof +sum.toFixed(2));
// number
NaN은 Not a number의 약자이다.
대표적으로 숫자와 문자를 곱하거나 나눌 때 출력된다.
console.log(5 * 'A');
// NaN
2. 문자(string)
자바스크립트 문자 타입은 작은 따옴표 혹은 큰 따옴표 안에 텍스트를 넣어 생성한다.
문자열의 첫번째 요소는 0번 인덱스, 두번째 요소는 1번 인덱스 순으로 나타낸다.
여기에 띄어쓰기도 문자열의 요소로 포함한다.
var JOB = '웹 퍼블리셔';
console.log(JOB[0]);
// "웹"
console.log(JOB[1]);
// " "
var JOB = '웹 퍼블리셔';
console.log(JOB.length)
// 6
3. 불리언(boolean)
불리언 타입은 true와 false 두 가지 값을 가진다.
typeof(1) == 'number'
// true
typeof('가나다') == 'string'
// true
4. 널(null)
null 타입은 오직 null 값만 가진다.
의도적으로 값을 비울 때, 값이 없음을 명시할 때 사용한다.
5. 정의되지 않음(undefined)
undefined 타입은 오직 undefined 값만 가진다.
변수 선언 이후 값을 할당하지 않았을 때 해당 변수에 접근하면 undefined가 반환된다.
null과 undefined의 차이
null은 의도적으로 null 값을 할당해야 주어지는 반면
undefined는 변수를 선언하고 값을 할당하지 않으면 기본적으로 undefined 값을 가진다.
var Name;
console.log(typeof Name);
// undefined
또한 typeof 로 null의 타입을 확인하면 null이 아닌 object가 출력되기 때문에 일치 연산자(===)를 사용해야 한다.
var Name = null;
console.log(typeof null);
// object
console.log(Name === null);
// true
6. 심볼(Symbol)
심볼 타입은 ES6에 추가된 타입으로 변경 불가능한 유일한 값을 지닌다.
심볼은 객체 프로퍼티 키를 만들기 위해 사용하며 Symbol()
로 생성할 수 있다.
let Name1 = Symbol("홍길동");
let Name2 = Symbol("홍길동");
console.log(Name1 == Name2);
// false
7. 객체(Object)
중괄호를 사용해 데이터를 담는데 사용하는 타입으로 {name: value} 로 이루어진다.
프로퍼티(property)란 하나의 name: value를 지칭한다.
따라서 객체는 프로퍼티의 집합이라고 할 수 있다.