JavaScirpt_6데이터 타입

Yoon Tschoe·2022년 1월 14일
0

JavaScript

목록 보기
5/10

JavaScirpt 공부 정리
<모던 자바스크립트 Deep Dive>의 목차를 따릅니다. 책을 발제하는 것을 기본 골조로 하고, 개인이 공부한 내용을 추가합니다.


1. 데이터 타입

구분데이터 타입설명
원시타입number정수, 실수 구분 없이 하나의 숫자 타입만 존재
원시타입string문자열
원시타입boolean논리적 true/false
원시타입undefinedvar 키워드로 선언된 변수에 암묵적으로 할당되는 값
원시타입null값이 없다는 것을 의도적으로 명시할 때 사용하는 값
원시타입symbolES6에서 추가된 7번째 타입
객체 타입-객체, 함수, 배열 등

1-1. primitve type

1) number type

  • 모든 수를 실수로 처리 (배정밀도 64비트 부동소수점 형식)
  • speicla numeric values: infinity, -infinity, NaN(not a number)
  const infinity = 1 / 0;
  const negativeInfinity = -1 / 0;
  const x = 'string' / 2;

2) string type

  • 따옴표로 감싸지 않으면, 자바스크립트 엔진은 키워드나 식별자 같은 토큰으로 인식한다.
var string = hello; // ReferenceError: hello is not defined
  • 템플릿 리터럴: 백틱(``) 사용
    • 멀티라인 문자열
    • 표현식 삽입
console.log(`1 + 2
= ${1 + 2}`);
// 1 + 2
// = 3

3) boolean type

  • false: 0, null, undefined, NaN, ''
  • true: any other value
const canRead = true; // value: ture, type: boolean
const test = 3 < 1; // value: false, type:boolean

4) undefined type

  • 개발자가 의도적으로 할당하는 것이 아니라, var 키워드로 선언된 변수에 암묵적으로 할당되는 값

5) null type

  • 값이 없다는 것을 의도적으로 명시할 때 사용하는 값
    • 변수가 이전에 참조하던 값을 더이상 참조하지 않겠다는 의미로, 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거한다. (TIP. 변수의 스코프를 좁게 만들어 변수 자체를 재빨리 소멸시키는 편이 낫다.)
  • 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 한다.
<!DOCTYPE html>
<html>
<body>
  <script>
    var element = document.querySelector('.myClass');

    // HTML 문서에 myClass 클래스를 갖는 요소가 없다면 null을 반환한다.
    console.log(element); // null
  </script>
</body>
</html>

6) symbol type

  • 다른 값과 중복되지 않는 유일무이한 값: 고유한 식별자가 필요할 때 사용한다.
  • 생성: 심벌 이외 원시 값은 리터럴을 통해 생성하지만, 심벌은 symbol 함수를 호출해 생성한다.
  • 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용한다.
// 심벌 값 생성
var key = Symbol('key');
// 객체 생성
var obj = {};

obk[key] = 'value';
console.log(obj[key]); // value

1-2. obeject type

2. 데이터 타입의 필요성

  • 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
    • 모든 값은 데이터 타입을 가지며, 메모리에 2진수, 즉 비트의 나열로 저장된다.
  • 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
    • 메모리 공간의 선두 메모리 셀의 주소를 찾아간 다음, 한번의 몇개의 메모리 셀 수(=바이트 수)를 읽어 들일 것인가
  • 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해

3. 동적 타이핑

  • cf. 정적 타입 언어
    • C, Java
    • 변수의 타입을 변경할 수 없고, 변수에 선언한 타입에 맞는 값만 할당할 수 있다.
    • 정적 타입 언어는 변수 선언 시점에 변수의 타입이 결정되고 변수의 타입을 변경할 수 없다.
  • JS의 변수는 선언이 아닌 할당에 의해 타입이 추론(inference)된다.
  • 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.
  • 정리하자면, 변수는 타입을 갖지 않는다. 값이 타입을 갖을 뿐이다.
  • 주의하자, 동적 타입 언어는 high flexibilty, low reliability

💫TIP

  • 변수는 꼭 필요한 경우에 한해 제한적으로 사용한다.
  • 변수의 유효 범위(스코프)를 최대한 좁게 만들어 변수의 부작용을 억제한다.
  • 전역 변수는 최대한 사용하지 않도록 한다.
  • 변수보다는 상수를 사용해 값의 변경을 억제한다.
  • 변수의 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍한다. 마치 아이 이름 짓듯이 심사숙고해서 짓자.
profile
프론트엔드 개발자를 목표로 하는 전 미술기획자

0개의 댓글