[JavaScript] 리터럴 / 타입
리터럴
자바스크립트는 자바나 C언어같은 정적 타입 언어처럼 타입을 강력하게 지켜야 하는 언어는 아니다.
let const등으로 변수를 선언하고 그에 맞는 값을 작성했을 때, 자바스크립트 엔진은 그 코드가 실행될 때 값의 리터럴에 따라서 변수에 해당하는 값을 할당하며, 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. (동적 타입 언어)
자바와 C언어에서는 1.0f 324L 처럼 숫자 표현을 명확히 하기 위해 리터럴을 사용했고, 자바스크립트에서의 리터럴은 다음과 같다.
정수 리터럴 | 100 |
이진수 리터럴 | 0b0101 |
문자열 리터럴 | "hello" or 'hello' |
boolean 리터럴 | true false |
null 리터럴 | null |
undefined 리터럴 | undefined |
객체 리터럴 | {a : 'A', b : 'B'} |
배열 리터럴 | [1,2,3] |
함수 리터럴 | function() {} |
표현식
프로그래밍 언어에서 값은 표현식이 평가되어 생겨난 결과이고, 표현식은 값으로 평가될 수 있는 모든 문장을 말한다.
const something = 10 + 20; // 10 + 20은 30을 생성하니 표현식이다.
something; // 그 자체로 표현식이다.
30; // 리터럴도 그 자체로 표현식이다.
const some; // 변수 선언문은 값이 아니므로 표현식이 아니다. undefined은 할당되지 않았을 때..
타입
데이터 타입은 값을 저장하고 참조할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해서, 메모리에서 읽어온 이진수를 어떻게 해석할지 결정하기 위해 사용된다.
원시 타입 (Primitive)
- Number : 정수와 실수를 구분하지 않고, 모든 수를 실수로 처리한다. 64비트 부동소수점 형식을 따른다.
- String : 문자열. ' ' 와 " " 로 표현할 수 있고, ` `로도 표현할 수 있다. (템플릿 리터럴) 이 경우 줄바꿈이 가능하다.
- boolean : 참 / 거짓
- undefined : 변수에 값이 선언되지 않았음을 의미한다.
- null : 의도적으로 값을 넣지 않았음을 명시할 때 사용된다.
- symbol : 유일한 값. ES6에서 추가됐다.
객체 타입 (Object)
Number타입에는 세 가지 특별한 값이 있다.
- Infinity : 양의 무한
- -Infinity : 음의 무한
- NaN : Not a Number
자바에서는 문자열을 String 객체로 표현하고, C언어에서는 문자열을 char타입의 배열로 표현하지만, 자바스크립트에서는 문자열을 기본 타입으로 표현함을 알아두자.
문자열을 기본 타입으로 제공하지만, 배열과 유사하게 각 문자에 접근할 수 있다.
템플릿 리터럴을 사용해서 문자열을 표시할 때, ${} 를 통해 표현식을 삽입할 수 있다.
const str = `1+2 = ${1+2}`; // 1+2 = 3
이 때 표현식의 결과는 문자열로 처리된다.
Symbol타입은 다른 값들과 중복되지 않는 성질이 있어 객체를 구분하는 key를 만들때 사용한다.
Symbol함수를 통해 생성하며 외부에 노출되지 않는다.
const key = Symbol('key');
const obj = {};
obj[key] = 'value'; // 사용 예시
Number타입의 크기는 64비트(8바이트)로 명시되어 있고 문자열은 한 문자당 2바이트로 명시되어 있지만 나머지 기본 타입들에 대해서는 명시된 정보가 없고, 엔진마다 다르게 다른 크기를 사용한다.
자바스크립트는 동적 타입 언어이니 변수를 사용할 때 각별히 주의해야 하며, 아래 내용을 참고해서 코드를 작성하자.
- 변수는 필요한 만큼 최소한으로 사용하자.
- 변수의 scope는 최대한 좁게 만들자.
- 전역 변수의 사용은 자제하자.
- 변수보다 상수를 사용하자.
- 변수명 대충 짓지 말자.
'Programming Language > JavaScript' 카테고리의 다른 글
[JavaScript] 스코프 (0) | 2022.03.10 |
---|---|
[JavaScript] 함수 (0) | 2022.03.10 |
[JavaScript] 타입 변환 / 단축 평가 (0) | 2022.03.08 |
[JavaScript] 연산자 / 제어문 (0) | 2022.03.08 |
[JavaScript] 입문 / 변수 (0) | 2022.03.07 |
댓글
이 글 공유하기
다른 글
-
[JavaScript] 함수
[JavaScript] 함수
2022.03.10 -
[JavaScript] 타입 변환 / 단축 평가
[JavaScript] 타입 변환 / 단축 평가
2022.03.08 -
[JavaScript] 연산자 / 제어문
[JavaScript] 연산자 / 제어문
2022.03.08 -
[JavaScript] 입문 / 변수
[JavaScript] 입문 / 변수
2022.03.07