[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를 지칭한다.

따라서 객체는 프로퍼티의 집합이라고 할 수 있다.

 

 

반응형