본문 바로가기
STUDY/Js

[Js] 동적 타입 언어

앞서 자바스크립트의 특징 중 하나가 동적 타입의 언어라는 점이였습니다.

 

 

ㅁ 데이터 타입 

 

# 기본 데이터 변수 선언

 

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