본문 바로가기

프로그래밍 언어/JavaScript

[JavaScript] 데이터 타입

데이터 타입과 변수의 동적 타이핑

  • 정적 타입 언어
    • 변수에 타입이 있는 언어
    • 그 변수의 타입과 일치하는 데이터만 저장 가능
    • C, Java
  • 동적 타입 언어
    • 변수에 저장된 데이터 타입을 동적으로 바꿀 수 있는 언어
    • 같은 변수에 숫자나 문자열과 같은 다양한 타입의 데이터를 대입할 수 있음
    • 자바스크립트

데이터 타입의 분류

  • 원시 타입(Primitive type)
    • 데이터를 구성하는 가장 기본적인 요소로 값을 바꿀 수 없는 데이터
    • 숫자, 문자열, 논리값, undefined, null, symbol(ECMAScript 6에 추가된 값, 심벌)
  • 객체 타입
    • 원시 타입에 속하지 않는 자바스크립트의 값
    • 변수 여러 개가 모여서 만들어진 복합 데이터 타입
    • 객체 안에 저장된 값은 변경 가능
    • 참조 타입, 객체 타입의 값을 변수에 대입하면 변수에는 그 객체에 대한 참조(메모리에서의 위치 정보)가 할당됨
    • 자바스크립트의 배열, 함수, 정규 표현식 등

숫자

  • 리터럴: 프로그램에 직접 작성할 수 있는 상수 값
    • 정수 리터럴
    • 부동소수점 리터럴
  • NaN: 0을 0으로 나눈 값, Infinity를 Infinit로 나눈 값,음수의 제곱근 등 숫자로 표현할 수 없는 부정 값

문자열

  • 이스케이프 시퀀스: 역슬래시(\) 뒤에 특정 문자를 뜻하는 기호를 표기한 형태
    • ex) ‘I \’m going to learn Javascript.’
  • 써로게이트 페어: UTF-16 유니코드로 표현할 수 있는 범위를 넘어서는 문자들
    • 이모티콘, 자주 사용되지 않는 한자 등

논리값

  • true, false
  • 논리값을 주로 제어 구문에 사용: if/else문, while문, do/while문, for문

특수한 값

  • undefined, null: 값이 없음
  • undefined: 정의되지 않은 상태
    • 값을 아직 할당하지 않은 변수의 값
    • 없는 객체의 프로퍼티를 읽으려고 시도했을 때의 값
    • 없는 배열의 요소를 읽으려고 시도했을 때의 값
    • 아무것도 반환하지 않는 함수가 반환하는 값
    • 함수를 호출했을 때 전달받지 못한 인수의 값
  • null: 아무것도 없음을 값으로 표현한 리터럴
    • 주로 프로그램에서 무언가를 검색했지만 찾지 못했을 때 아무것도 없음을 전달하기 위한 값으로 사용

ECMAScript 6부터 추가된 데이터 타입

심벌(Symbol)

  • 심벌은 이터레이터, instanceof 재정의, 메서드의 다양한 확장 방법 등을 이해하기 위한 필요한 기초 지식
  • 자기 자신을 제외한 그 어떤 값과도 다른 유일무이한 값
  • Symbol() 을 사용하여 생성
    • 호출할 때마다 새로운 값을 만듦
      var sym1 = Symbol();
      var sym2 = Symbol();
      console.log( sym1 == sym2 ); //false
  • Symbol()에 인수를 전달하면 생성된 심벌의 설명을 덧붙일 수 있음
    var HEART = Symbol( “하트” );
    console.log( HEART.toString() ); //Symbol(하트)
  • 심벌과 문자열 연결하기
    • Symbol.for() 으로 문자열과 연결된 심벌을 생성할 수 있음
    • var sym1 = Symbol.for( “club” );
    • 전역 레지스트리에 심벌이 만들어짐
    • 이 기능으로 코드의 어느 부분에서도 같은 심벌을 공유할 수 있음
  • 심벌과 연결된 문자열은 Symbol.keyFor() 로 알 수 있음
    var sym1 = Symbol.for( “club” );
    var sym2 = Symbol( “club” );
    console.log( Symbol.keyFor(sym1) ); //club
    console.log( Symbol.keyFor(sym2) ); //undefined

템플릿 리터럴

  • 복잡한 문자열 처리를 간결하게 표현 가능
  • 역따옴표 사용 `
  • 문자열 리터럴과는 달리 줄 바꿈 문자를 표현할 때 이스케이프 시퀀스(\n) 사용 안해도 됨
  • 템플릿 리터럴을 사용하고 이스케이프 시퀀스 문자를 그대로 출력하려면 템플릿 리터럴 앞에 String.raw(태그함수) 를 붙인다
    • var t = String.raw`beauty\nis beauty`;
    • console.log(t); //beauty\nis beauty
  • 보간 표현식
    • 템플릿 리터럴 안에 플레이스 홀더 ${} 넣기
    • 문자열 안에 변수나 표현식의 결과값을 삽입 가능

 

이 글은 모던 자바스크립트 입문(이소 히로시)을 참고하여 작성되었습니다.