JavaScript/Basics

[JavaScript] 자료형 - Data Types

Sonny Cucumber 2022. 3. 9. 19:24

JS에는 여덟가지 기본 자료형이 있다.

변수는 자료형에 관계없이 모든 데이터일 수 있습니다.

따라서 어느 순간에는 문자열, 어느 순간엔 숫자가 될 수 있음

let message = "hello";
message = 123456;

이처럼 자료의 타입은 있지만 변수에 저장되는 값의 타입은

언제든지 바뀔 수 있는 언어를 '동적 타입' (dynamically typed)' 언어

 

숫자형

숫자형은 정수 및 부동소수점 숫자(floating point number)를 나타냅니다

이와 관련된 연산 또한 다양한데 덧셈 뺄셈 나눗셈 곱셈 등이 대표적이지요

또 일반적인 숫자 외에 Infinity, -Infinity, NaN 같은 '특수 숫자 값(specail numeri value)이 포함

  • Infinity는  어떤 숫자보다 더 큰 특수 값, 무한대를 나타낸다. 처음 알았네
    • 어느 숫자든 0으로 나누면 무한대를 얻을 수 있다
    • infinity를 직접 참조할 수도 있음
alert( 1 / 0 ); // 무한대
alert( Infinity ); // 무한대
  • NaN은 계산 중에 에러가 발생했다는 것을 나타내주는 값. (Not a number)
    • NaN에 어떤 추가 연산을 해도 결국 NaN이 반환
alert( "숫자가 아님" / 2 ); // NaN, 문자열을 숫자로 나누면 오류가 발생합니다.
alert( "숫자가 아님" / 2 + 5 ); // NaN

BigInt

내부 표현 방식 때문에 자바스크립트에선 (2**53 -1 = 2의 53승-1) (9007199254740991)보다

큰 값 혹은 -(2**53-1)보다 작은 정수는 '숫자형'을 사용해 나타낼 수 없음.

 

이 자료형은 표준으로 채택된 지 얼마 안도니 자료형으로, 길이에 상관없이 정수를 나타낼 수 있다

또 정수 리터럴 끝에 n을 붙이면 만들 수 있다. (IE에선 지원안함ㅋㅋ)

// 끝에 'n'이 붙으면 BigInt형 자료입니다.
const bigInt = 1234567890123456789012345678901234567890n;

 

문자형 (String)

let str = "Hello";
let str2 = 'Single quotes are ok too';
let phrase = `can embed another ${str}`;

다 알겠지만 세번째는

중간에 원하는 변수나 표현식을 문자열(String) 중간에 넣기 위함

 

let name = "John";

// 변수를 문자열 중간에 삽입
alert( `Hello, ${name}!` ); // Hello, John!

// 표현식을 문자열 중간에 삽입
alert( `the result is ${1 + 2}` ); // the result is 3

이렇게 문자열 중간에 들어간 변수나 표현식은 문자열의 일부가 된다

따옴표들을 넣으면 이렇게 못쓴다. 

 

불린형(Boolean)

여기엔 true아니면 false 밖에 없다.

 

이외에 비교 결과를 저장할 때도 사용되는데

let isGreater = 4 > 1;

alert( isGreater ); // true (비교 결과: "yes")

'null'값

위에 어떠한 자료형에도 속하지 않는 null은 ('존재하지 않는 객체에 대한 참조')

오로지 null값만 포함하는 별도의 자료형을 만듬

 

'undefined'값

널 처럼 자신만의 자료형을 형성하는데 값이 할당되지 않은 상태를 나타냄

예를 들어 변수를 선언하고 할당하지 않았다고 하면 자동으로 undefined가 할당

 

권장하지 않지만 일부러 명시적으로 할당하는 것도 가능.

let age;

alert(age); // 'undefined'가 출력됩니다.

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

let age = 100;

// 값을 undefined로 바꿉니다.
age = undefined;

alert(age); // "undefined"

객체와 심볼

이건 특수한 자료형인데 다른 자료형은 한가지의 자료형만 표현이 가능해서

원시 자료형이라고 부름 (primitive type)

 

반면 객체는 데이터 컬렉션이나 복잡한 개체(entity)를 표현가능

그래서 객체는 좀 더 특별한 취급을 받고 추후에 설명하겠음

 

심볼(symbol)형은 객체의 처음봤다...

고유한 식별자(unique identifier)를 만들 때 사용됨

 

typeof 연산자 

이건 인수의 자료형을 반환한다. 자료형에 따라 처리 방식을 다르게 하고싶거나

변수의 자료형을 알아내야할 때 내가 정말 많이 쓴다! 

두가지 형태의 문법을 지원하는데

  1. 연산자:  typeof x
  2. 함수: typeof(x)
typeof undefined // "undefined"

typeof 0 // "number"

typeof 10n // "bigint"

typeof true // "boolean"

typeof "foo" // "string"

typeof Symbol("id") // "symbol"

typeof Math // "object"  (1)

typeof null // "object"  (2)

typeof alert // "function"  (3)

밑에 세개는 조금 헷갈릴 수 있는데

  1. Math는 수학 연산을 제공하는 내장 객체이기에 오브젝트(객체)로 나옴.
    내장 객체는 객체형이기에.
  2. typeof null의 결과도 오브젝트인데, 널은 별도의 고유한 자료형을 가지는 특수 값으로
    객체가 아니지만, 하위 호환성을 위해 이런 오류를 냅둔거임.  언어의 오류이므로 객체가 아니긴하다
  3. 피연산자가 함수면 function 을 반환. 근데 '함수'형이라는 건 없음. 함수는 객체형에 속하지만
    이게 형식적으로는 잘못된거지만 오래된 규칙을 이기에 호환성을 위해 남겨져있고 실무에선 잘 쓴단다