JavaScript의 자료형과 JavaScript만의 특성

sona·2022년 10월 13일
0

⚙️ 기술로그

목록 보기
8/23

✏️ 느슨한 타입(loosely typed)의 동적(dynamic) 언어

JavaScript는 느슨한 타입(loosely typed)의 동적(dynamic) 언어 이다. 변수의 타입을 미리 선언하지 않아도 알아서 변환해준다. 프로그램 처리 과정에서 타입이 자동으로 파악되고, 같은 변수에 모든 타입의 값으로 할당 & 재할당이 가능하다.


✏️ 느슨한 타입(loosely typed)의 동적(dynamic) 언어의 문제점은 무엇이고 보완할 수 있는 방법에는 무엇이 있을지 생각해보세요.

문제점

  • 변수 생성시 타입을 미리 선언하지 않아도 된다는 장점이 있지만 실행 도중 예상치 못한 타입이 들어와 에러가 발생할 수 있다. 특히 대형 프로젝트에서 타입에러를 직면하게 된다면 문제가 많이 까다로워진다.

보완방법

  • 해결 방법은 TypeScript나 Flow 등을 사용하면 된다.
    타임스크립트는 JS에 타입을 부여한 정적 타입 언어이다. 이런 정적 타임 언어는 런타임 이전에 타입이 올바르게 작성 되었는지에 대한 검사를 시행해주며, 동적 타입 언어는 런타임에 프로그램의 타입이 올바르게 작성 되었는지에 대한 검사를 실행한다.
    정적 언어에서 오류가 발생한다면 컴파일 하는 과정에서 오류를 출력하고, 동적 언어는 해당 구문이 실행되는 시점에서 오류를 출력한다.

✏️ JavaScript 형변환

JavaScript는 타입이 매우 유연한 언어로서 자바스크립트 엔진이 필요함에 따라 암시적변환 혹은 개발자의 의도에 따라 명시적변환을 실행한다.

암시적변환

암시적 변환이란 자바스크립트 엔진이 필요에 따라 자동으로 데이터타입을 변환시키는 것이다.

명시적변환

명시적변환이란 개발자가 의도를 가지고 데이터타입을 변환시키는 것이다.


✏️ ==, ===

== : 동등 연산자
=== : 일치 연산자

둘 다 값을 비교해주는 비교 연산자이지만 무엇이 다를까?
== 는 값을 비교하기 전 강제 형변환을 수행하여 피 연산자들을 공통 타입으로 만들고 그 안에 있는 값만을 비교하는 '느슨한 비교'를 한다.

그에 비해 === 는 강제 형변환 과정을 수행하지 않는 '엄격한 비교'이기 때문에 type까지 엄격하게 비교해준다.

1 == '1' // true
1 === '1' // false

✏️ undefined와 null의 미세한 차이들을 비교해보세요.

undefined와 null은 자바스크립트에서 '값이 없음'을 나타내고 있다.
그럼 무엇이 다를까?

undefined
데이터 타입이자 값을 나타내며 '아무 값도 할당받지 않은 상태'를 의미한다. 즉 undefined는 자료형이 없는 상태이다.(변수를 선언만 하고 초기화를 하지 않았을 때)

null
null은 원시값(Primitive Type)중 하나로서 어떤 값이 의도적으로 비어있음을 표현한다.

0개의 댓글