- 자바스크립트는 동적 타입(Dynamic/Weak Type)언어이다. 변수의 타입 지정(Type annotation)없이 값이 할당되는 과정에서 자동으로 변수의 타입이 결정(타입 추론, Type Inference)된다. 즉, 변수는 고정된 타입이 없다.
1. 데이터 타입
- 데이터 타입(Data Type)은 프로그래밍 언어에서 사용할 수 있는 데이터(숫자, 문자열, 불리언 등)의 종류를 말한다.
- 자바스크립트에서 제공하는 7개의 데이터 타입은 크게 원시 타입과 객체 타입으로 구분할 수 있다.
1.1 원시 타입(Primitive Data Type)
- 원시 타입의 값은 변경 불가능한(immutable value) 이며 pass-by-value(값에 의한 전달)이다.
1.1.1 number
- 자바스크립트는 하나의 숫자 타입만 존재한다.
- 자바스크립트는 2진수, 8진수, 16진수 데이타 타입을 제공하지 않기 때문에 이들 값을 참조하면 모두 10진수로
해석된다. - 자바스크립트의 숫자 타입은 정수만을 위한 타입이 없고 모든 수를 실수로 처리한다.
- 추가적으로 3가지 특별한 값들도 표현할 수 있다.

1.1.2 string
- 문자열(String) 타입은 텍스트 데이터를 나타내는데 사용한다.
- 문자열은 작은 따옴표(' ') 또는 큰 따옴표(" ")안에 텍스트를 넣어 생성한다.
- 자바스크립트의 문자열은 원시 타입이며 변경 불가능하다.
이것은 한 번 문자열이 생성되면, 그 문자열은 변경할 수 없다는 것을 의미한다.

- 첫번째 구문이 실행되면 메모리에 문자열 'Hello'가 생성되고 식별자 str은 메모리에 생성된 문자열 'Hello'의 메모리 주소를 가리킨다. 그리고 두번째 구문이 실행되면 이전에 생성된 문자열 'Hello'을 수정하는 것이 아니라 새로운 문자열 'world'를 메모리에 생성하고 식별자 str은 이것을 가리킨다. 이때 문자열 'Hello'와 'world'는 모두 메모리에 존재하고 있다. 변수 str은 문자열 'Hello'를 가리키고 있다가 문자열 'world'를 가리키도록 변경되었을 뿐이다.

- 문자열은 배열처럼 인덱스를 통해 접근할 수 있다. 이와 같은 특성을 갖는 데이터를 유사 배열이라 한다.
- str[0] = 'S' 처럼 이미 생성된 문자열의 일부 문자를 변경해도 반영되지 않는다.
- 그러나 새로운 문자열을 재할당하는 것은 가능하다. 이는 기존 문자열을 변경하는 것이 아니라 새로운 문자열을 새롭게 할당하는 것이기 때문이다.
1.1.3 undefined
- undefined 타입의 값은 undefined가 유일하다. 선언 이후 값을 할당하지 않은 변수는 undefined 값을 가진다.
즉, 선언은 되었지만 값은 할당하지 않은 변수에 접근하거나 존재하지 않는 객체 프로퍼티에 접근할 경우
undefined가 반환된다. - 이는 변수 선언에 의해 확보된 메모리 공간을 처음 할당이 이루어질 때까지 빈 상태(대부분 비어있지 않고 쓰레기 값이 들어있다.)로 내버려두지 않고 자바스크립트 엔진이 undefined로 초기화하기 때문이다.
1.1.4 null
- null 타입의 값은 null이 유일하다. 자바스크립트는 대소문자를 구별(case-sensitive)하므로 Null, NULL등과 다르다.
- 프로그래밍 언어에서 null은 의도적으로 변수에 값이 없다는 것을 명시할 때 사용한다.
- 함수가 호출되었으나 유효한 값을 반환할 수 없는 경우, 명시적으로 null을 반환하기도 한다.
- null 타입을 확인할 때 typeof 연산자를 사용하면 안되고 일치 연산자(===)를 사용하여야 한다.
1.1.5 symbol
- 심볼은 ES6에서 새롭게 추가된 7번째 타입으로 변경 불가능한 원시 타입의 값이다. 심볼은 주로 이름의 충돌 위험이 없는 유일한 객체의 프로퍼티 키(property key)를 만들기 위해 사용한다.
- 심볼은 Symbol 함수를 호출해 생성한다. 이때 생성된 심볼 값은 다른 심볼 값들과 다른 유일한 심볼 값이다.

1.2 객체 타입(Object type, Reference type)
- 객체는 데이터와 그 데이터에 관련한 동작(절차, 방법, 기능)을 모두 포함할 수 있는 개념적 존재이다. 달리 말해, 이름과 값을 가지는 데이터를 의미하는 프로퍼티와 동작을 의미하는 메소드를 포함할 수 있는 독립적 주체이다.
'JavaScript' 카테고리의 다른 글
| [PoiemaWeb] 단축 평가 (0) | 2023.03.08 |
|---|---|
| [PoiemaWeb] break, continue (0) | 2023.03.08 |
| [PoiemaWeb] 연산자 (0) | 2023.03.08 |
| [PoiemaWeb] 변수 (0) | 2023.03.08 |
| [PoiemaWeb] 기본 문법 (0) | 2023.03.07 |