JavaScript

[JavaScript] 데이터 타입 - 숫자 타입, 문자열 타입

김나나_ 2023. 11. 2. 22:50

자바스크립트의 모든 값은 데이터 타입을 갖는다.

자바스크립트(ES6)는 7개의 데이터 타입을 갖는다.

7개의 데이터 타입은 원시 타입(primtive type), 객체 타입(object/reference type)으로 분류할 수 있다.

(ES11에서는 새로운 원시값 BIgint가 추가되었다. Bigint는 숫자값을 안정적으로 나타낼 수 있는 최대치인 2^53-1보다 큰 정수를 표현할 수 있는 새로운 원시값이다.)

 

출처: https://velog.io/@ymh0951/Javascript-%EB%8D%B0%EC%9D%B4%ED%84%B0-%ED%83%80%EC%9E%85
출처: https://amunre21.github.io/js/4-js-data-type-and-variable/

 

 

숫자 타입(number)

C나 자바같은 경우, 정수와 실수를 구분해서 int, long, float, double 등과 같은 다양한 숫자 타입을 제공한다.

하지만 자바스크립트는 하나의 숫자 타입만 존재한다.

 

ECMAScript 사양에 따르면 숫자 타입의 값은 배정밀도 64비트 부동소수점 형식을 따른다.

즉, 모든 수를 실수(소수점 이하가 있는 숫자)로 처리하며, 정수만 표현하기 위한 데이터 타입(integer type)이 별도로 존재하지 않는다.

=> 정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64비트 부동소수점 형식의 2진수로 저장된다.

 

자바스크립트의 숫자 타입은 모두 실수로 처리하기 때문에 정수로 표시되는 수끼리 나누더라도 실수가 나올 수 있다.

// 숫자 타입은 모두 실수로 처리된다.
console.log(1 === 1.0); // true

 

숫자 타입은 다음의 세 가지 특별한 값도 표현할 수 있다.

  1. Infinity: 양의 무한대
  2. -Infinity: 음의 무한대
  3. NaN: 산술 연산 불가(not-a-number)

 

자바스크립트는 대소문자를 구별(case-sensitive)하므로 NaN을 NAN, Nan, nan과 같이 표현하면 에러가 발생한다.

 

 

문자열 타입(string)

문자열 타입은 텍스트 데이터를 나타낸다.

문자열은 0개 이상의 16비트 유니코드 문자(UTF-16)의 집합으로 전 세계 대부분의 문자를 표현할 수 있다.

 

// 문자열 타입
var string;
string = '문자열'; // 작은따옴표
string = "문자열"; // 큰따옴표
string = `문자열`; // 백틱(ES6)

 

다른 타입의 값과 달리 문자열로 따옴표를 감싸는 이유는 키워드나 식별자 같은 토큰과 구분하기 위해서이다.

만약 문자열을 따옴표로 감싸지 않으면 자바스크립트 엔진은 키워드나 식별자 같은 토큰으로 인식한다.

 

 

C는 문자열 타입을 제공하지 않고 문자의 배열로 문자열을 표현하고, 자바는 문자열을 객체로 표현한다.

그러나 자바스크립트의 문자열은 원시 타입이며, 변경 불가능한 값(immutable value)이다.

=> 문자열이 생성되면 그 문자열을 변경할 수 없다.

 

 

퀴즈

 

- 자바크립트는 정수와 실수를 구분한다. (O, X)

더보기

정답: X

 

ECMAScript 사양에 따르면 숫자 타입의 값은 배정밀도 64비트 부동소수점 형식을 따른다.

즉, 모든 수를 실수(소수점 이하가 있는 숫자)로 처리하며, 정수만 표현하기 위한 데이터 타입(integer type)이 별도로 존재하지 않는다.

=> 정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64비트 부동소수점 형식의 2진수로 저장된다.

 

- 다음 코드의 결과값은 무엇일까?

1 * 'a'
더보기

정답: NaN

 

NaN: 산술 연산 불가(not-a-number)

 

- 자바스크립트의 문자열은 원시값이다. (O, X)

더보기

정답: O

 

자바스크립트의 문자열은 원시 타입이며, 변경 불가능한 값(immutable value)이다.

 

참고: 모던 자바스크립트 Deep Dive