JS 데이터 타입

Joah·2022년 9월 29일
0

Javascript

목록 보기
11/16

게시글은 공부용이며 출처를 제시합니다.
출처: 소플의 처음 만난 React, 리액드를 다루는 기술, 모던 자바스크립트 deep dive

📍 데이터 타입

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

숫자 타입

부동소수점 형식으로 모든 수를 실수로 처리한다.

let a = 10;
let b = 12.3;
let c = -30;

2진수, 8진수 16진수 리터럴은 모두 2진수로 저장된다.

문자 타입

let a = "문자열";
let b = '문자열';
let c = `문자열`;

템플릿 리터럴은 자동으로 개행이 된다.

let template = `<ul>
<li><a href="#">Home</a></li>
</ul>`

console.log(template)


//출력결과
<ul>
  <li><a href="#">Home</a></li>
</ul>

불리언 타입

true 와 false를 나타내는 값

undefined 타입

var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화 된다.
변수 선언에 의해 확보된 메모리 공간을 처음 할당이 이뤄질 때가지 빈 상태로 내버려두지 않고 자바스크립트 엔진이 undefined로 초기화 한다.

undefined는 개발자가 의도적으로 할당하기 위한 값이 아니라 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값이다.

변수를 참조했을 때 undefined가 반환된다면 참조한 변수가 선언 이후 값이 할당된 적이 없는 변수이다.

null

변수에 값이 없다는 것을 의도적으로 명시하고 싶을 때 null을 사용한다.
변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미다.

이는 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미하며, 자바스크립트 엔진은 누구도 참조하지 않는 메모리 공간에 대해 가비지 콜렉션을 수행할 것이다.

함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 한다.

symbol

변경 불가능한 원시 타입의 값이다.
심벌 값은 다른 값과 중복되지 않는 유일무이한 값이다.
주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.

심벌 이외의 값은 리터럴을 통해 생성하지만 심벌은 Symbol 함수를 호출해 생성한다.

이때 생성된 심벌 값은 외부에 노출되지 않으며, 다른 값과 절대 중복되지 않는 유일무이한 값이다.

let key = Symbol('key');
console.log(typeof key);
//symbol

let obj = {};
obj[key] = "value";
console.log(obj[key]);
//value
//이름이 충돌할 위함이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용한다.

객체
나중에 따로 다루자


📍 데이터 타입의 필요성

자바스크립트 엔진은 데이터 타입에 따라 정해진 크기의 메모리 공간을 확보한다.

  • 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해

  • 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해

  • 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해


📍 자바스크립트는 동적 타입 언어이다.

자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.

동적 타입 언어는 자유도가 높아 예상치 못한 오류를 발생하기 때문에 아래의 규칙을 따른다.

  1. 변수는 꼭 필요한 경우에 한해 제한적으로 사용한다. 재할당 가능한 변수의 갯수가 많으면 그만큼 오류 발생 가능성도 높아진다.

  2. 변수의 유효 범위(스코프)는 최대한 좁게 만들어 변수의 부작용을 억제한다.

  3. 전역 변수는 최대한 사용하지 않는다. 어디서든 참조 가능하기 때문에 의도치 않게 값이 변결될 가능성이 높다

  4. 변수보다는 상수를 사용한다.

  5. 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍한다.

profile
Front-end Developer

0개의 댓글