1. 자바스크립트 변수
ㅇ 명시적인 변수 선언은,
- `var`,`let` 라는 예약어 만으로 가능
- 이외에는 암묵적(자동)으로 행해짐
ㅇ 변수명 규칙 ☞ 자바스크립트 명명규칙 참조
- ① `영문자, $, _` (3 종류) 만으로 시작해야 함
- ② 대소문자 구분
- ③ 다만, 각 변수가 유일한 이름 만 있으면 됨
2. 자바스크립트 변수의 타입 특징
ㅇ 명시적인 타입이 없음
- 자바 언어,C 언어의 int,double 등과는 달리,
. 변수를 미리 규정하는 `정적 타입`이 없고,
. `동적 타입`이라고해서 실행 도중(값을 할당할 때) 정해짐
- 기본적으로, 자동 형변환 됨
ㅇ 엄격한 타입 구분이 없음 (느슨한 타입)
- 다만, 각 변수가 유일한 이름 만 있으면 됨
- 즉, 자바스크립트 변수는 특정 시간에 특정 값을 가리키는 이름 자체일 뿐,
. 변수의 값과 타입은 실행 중에 얼마든지 바뀔 수 있음
. 동적 바인딩으로 개체 참조(연관,association)가 실시간으로 이루어짐
. 例) anyVar.relevantMethod() 일 때,
.. 변수(anyVar)가 문자열형이면 문자열형 String 객체에 있는 메소드가 실행됨
.. 변수(anyVar)가 숫자형이면 숫자형 Number 객체에 있는 메소드가 실행됨
ㅇ 변수에 타입을 규정하는 특별한 구문이 없음
- var, let 이라는 변수 선언 예약어 만으로도 가능
. 변수 선언 시 자료형(Data Type)이 미리 알려주지 않음
. 즉, 변수 자료형 미선언
ㅇ 변수 타입(Data Type) 검사 등이 엄격하지 않음
- 변수에 임의 타입의 값을 대입 가능
- 변수가 임의 타입의 객체를 참조할 수도 있음
- 사용 전에 반드시 변수 선언할 필요도 없음
3. 자바스크립트 변수 타입의 느슨한 구분
※ 자바스크립트 변수 타입의 구분은,
- 명시적인 타입 구분을 하지 않음
- 다만, 개념적으로 아래와 같이, 크게 2개로 구분을 함 (느슨한 타입)
- 즉, 다음과 같이 열거된 타입들을 변수에 대입 가능
ㅇ 기본 타입/원시 타입 (primitive type,built-in type)
- 종류 : 문자열형,숫자형,논리값형,null,undefined,symbol (6개)
. string 타입 : 대부분의 타 프로그래밍 언어와 같음
. number 타입 : 타 프로그래밍 언어와 달리, 내부적으로 64 비트 부동소수점 만 지원
. boolean 타입 : true,false 2개 값 만 가능
. undefined 타입 : 변수가 선언 만 되고 값이 주어지지 않은 경우
. null 타입 : 선언된 변수가 null 값(값을 정할 수 없음, 0/0 등)으로 된 것
. symbol 타입 : (ECMAScript 6에 신규로 추가)
- 특징
. 스택 메모리에 저장됨
. 그 자체가 값을 나타냄
. 단 하나의 값 만 가짐
. 고정 크기를 가짐
ㅇ 객체 타입 (object type) 또는 참조 타입 (reference type)
- 종류 : Object object,Array object,Date object,RegExp object,Function object 등
- 특징 : 동적 바인딩되므로 실행 중에도 그 값이 변할 수 있음
. 여러 복잡한 값들을 가질 수 있음(즉,복합 데이터 타입)
. 가변 크기
- 한편, 참조 타입 (reference type) 이란?
. 해당 메모리 영역을 가리키는(참조하는) 메모리 번지가 저장되는 타입을 말함
ㅇ 타입의 확인
- typeof 변수; => 변수 타입에 따라,
. string,number,boolean,undefined 등을 리턴함
- typeof 객체; => object 를 리턴함
- typeof 함수; => function 를 리턴함
4. 자바스크립트 변수 타입의 7가지 구분 (판단하기)
※ ☞ 자바스크립트 타입 구분 참조
- number, string, boolean, undefined, object, function, symbol
5. 자바스크립트 변수 타입의 변환
※ ☞ 자바스크립트 타입 변환 참조
- 암묵적 형 변환, 명시적 형 변환 참조
6. 자바스크립트 상수
ㅇ const 키워드로 선언
ㅇ 특징
- 블록 단위 스코프
- 선언시 반드시 초기값 할당해야 함
- 재할당(변경) 불가
- 상수로 선언된 배열,객체 내부의 값 변경은 가능