C나 자바같은 정적타이핑 언어는 변수를 선언할때 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선언해야한다. 이를 명시적 타입선언이라고한다.
자바스크립트는 이러한 정적타이핑 언어와는 다르게 변수를 선언할때 타입을 선언하지 않는다.
변수에 할당된 값의 데이터 타입을 반환하는 typeopf연산자를 활용하여 예시를 살펴보자.
let foo;
console.log(typeof foo); //undefined
foo = 3;
console.log(typeof foo); //number
foo = 'Hello';
console.log(typeof foo); // string
foo = 'true';
console.log(typeof foo); // boolean
foo = null;
console.log(typeof foo); // object
foo = Symbol();
console.log(typeof foo); // symbol
foo = {};
console.log(typeof foo); // object
foo = [];
console.log(typeof foo); // object
foo = function() {};
console.log(typeof foo); // function
정적 타입언어는 변수 선언시점에서 타입이 결정되고, 변수의 타입을 변경할 수 있는 반면 자바스크립트에서는값을 할당하는 시점에서 변수의 타입이 결정되고 변수의 타입을 언제든지 자유롭게 변경할 수 있다.
이러한 특징을 동적타이핑이라고 하며, 자바스크립트는 동적 타이핑 언어라고한다.
동적타이핑언어는 변수에 어떤 데이터 값이라도 자유롭게 할당할 수 있어서 데이터 타입에 대해 무감각해질정도로 편리하다. 하지만 항상그렇듯 편리함 속에는 위험도따르는법이다.
동적타이핑언어는 타입이 고정되어있지 않고 언제든지 값의 변경에 의해 타입도 변경될 수 있기 때문에 개발자에 의도와 상관없이 자바스크립트 엔진에 의해 암묵적으로 타입이 변화되기도하며 잘못된 예측에 의해 작성된 프로그램은 오류가 발생할 것이다.
결국 동적 타이핑언어는 유연성은 높지만 신뢰성은 떨어진다.
틀린 지식에 대해서는 피드백 부탁드립니다.