앞서 자바스크립트의 특징 중 하나가 동적 타입의 언어라는 점이였습니다.
ㅁ 데이터 타입
# 기본 데이터 변수 선언
Java, C 등은 별도의 기본 데이터 타입(Priprimitive type) 을 제공하고 있지만, 자바스크립트는 별도의 데이터 타입을
구분하지 않고 모두 'var' 라는 데이터 타입으로 통일하여 변수를 선언하고 있습니다.
var num;
var x = 10;
var str = "Javascript";
console.log(num); // undefined
console.log(x); // 10
console.log(str); // Javascript
자바스크립트에서는 위와 같이 문자열이나 정수형의 구분 없이 모두 'var' 데이터 타입으로 설정하는 것을
확인할 수 있습니다.
또한, 여기서 주목할 점은 변수를 설정하고 어떤 값도 대입하지 않은 상태라면 'undefined' 가 출력되는 것을
볼 수 있습니다.
# 선언 생략
자바스크립트에서는 변수를 선언하지 않은 상태에서 바로 값을 대입하여 사용할 수 있습니다.
만약, 변수를 선언하지 않고 값도 대입하지 않은 상태에서 출력하고자 한다면 아래와 같이 오류가 발생합니다.
console.log(ggg); // Uncaught ReferenceError: ggg is not define
num = 10;
console.log(num) // 10
하지만 'num' 같이 값을 대입하면, 변수의 선언 없이도 정상적으로 실행되는 것을 확인할 수 있습니다.
이는 자바스크립트 엔진( ex. 구글 Chrome V8 ) 에서 값만 대입한 경우, 해당 변수를 전역변수로 선언하기 때문입니다.
# 변수의 호이스팅(Hoisting)
자바스크립트의 특징 중 하나는 호이스팅(hoisting, 끌어올림) 입니다.
간단하게 설명하면, 아래 선언된 내용을 위로 가지고 오는다는 의미입니다.
예를 들어 아래 코드는 Java 등에서는 오류가 발생하는 코드입니다.
console.log(num); // undefined
var num;
하지만, 자바스크립트에서는 오류가 발생하지 않습니다.
그 이유는 자바스크립트 엔진 상에서 아래 선언된 변수를 마치 시작부터 선언한 것처럼 프로그램 시작점으로
올리기 때문입니다.
따라서, 해당 변수가 호출되는 시점상에서는 변수가 선언된 상태가 아니지만 마치 그 전에 호출된 것처럼
사용이 가능합니다.
이런 특징은 변수가 같은 이름으로 정의할 때도 영향을 줍니다.
동일한 이름으로 변수를 선언하면, 해당 변수를 끌어올린 후에 하나의 영역에서 하나의 변수로 인식합니다.
var num = 10;
var num = 20;
console.log(num); // 20
단, 주의할 점은 해당 변수에 할당한 값은 적용되지 않습니다.
cosole.log(num); // undefined
var num = 20;
ㅁ 원시 타입(Primitive Type) & 객체 타입(Reference Type)
자바스크립트에서도 일반적으로 데이터 타입을 원시 타입(Primitive Type) 과 참조 타입으로 구분할 수 있습니다.
원시 타입은 숫자, 문자열 등으로 구분되고, 참조 타입(Refrence Type) 은 객체(Object) 로 인한 타입입니다.
※ ECMAScript 6 에서 추가된 개념인 '심벌(Symbol)' 도 원시 타입
자바스크립트의 원시 타입 중에는 '값이 없는 상태' 를 의미하는 데이터 타입이 있습니다.
바로 'undefined' 와 'null' 입니다.
'undefined' 의 경우, 할당되지 않은 상태를 의미합니다.
변수를 선언은 했지만 값을 할당하지 않았다면, console.log() 로 출력해보면 'undefined' 가 출력되는 것을 확인할 수
있습니다.
'null' 의 경우, 값이 아무것도 없는 상태입니다.
이는 리터럴(상수) 로 정말 '무' 의 상태를 의미합니다.
'STUDY > Js' 카테고리의 다른 글
[Js] 객체 (Object ) (0) | 2019.11.24 |
---|---|
[Js] 함수(Function) (0) | 2019.11.24 |
[Js] 타입변환 (0) | 2019.11.17 |
[Js] typeof & instanceof (0) | 2019.11.17 |
[Js] JavaScript 특징 (0) | 2019.11.17 |