1차 공부/JavaScript

JavaScript의 자료형과 JavaScript만의 특성은 무엇인가

공대탈출 2022. 11. 19. 15:52

글쓰기에 앞서 글쓴이는 코딩에 미숙한 사람임을 알립니다.

더 구글링 해보면 더욱 더 자세한 내용이 공식문서 혹은 블로그에 정리 되어 있을 수 있습니다.



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

느슨한 타입의 동적 언어 말로하면 굉장히 어려워 보인다.

JavaScript의 변수는 어떤 특정 타입과 연결되지 않으며, 모든 타입의 값으로 할당 및 재할당이 가능하다는 것이다.

//느슨한 타입의 동적 언어 예시
let a = '문자열'	//a가 문자열
a = 1;	           //a가 숫자
a= true;	       //a가 boolean

 

느슨한 타입의 동적언어의 문제점은 무엇이고 보완할수 있는 방법은?

위와같은 JavaScript의 변수 특성상 실행 도중 변수에 '코드에서 예상치 못한 값'이 들어있어 Type Error가 발생할 수 있다.

TypeError : Cannot read property 'A' of undefined
TypeError : Cannot read property 'A' of null
TypeError : 'A' is not a function

이를 TypeScript나 Flow로 보완할 수 있다.

우선 TypeScript는 정적타입을 지원하므로 컴파일 단계에서 오류를 포작할 수 있고,

Flow는 타입추론을 이용해 보완 할 수 있다.

 

JavaScript 형 변환

JavaScript의 형 변환은 두가지로 나뉜다. 암시적 형 변환과 명시적 형 변환이다.

 

먼저 암시적 형 변환이란 스크립트가 사용자 동의 없이 자동으로 데이터 형태를 결정하는 것이다.

1 + '1' 	//11 출력 / 숫자 + 문자 = 문자
1 + 1 		//2 출력 / 숫자 + 숫자 = 숫자
true + '1'	//true1 출력 / 불린 + 문자 = 문자
true + 1 	//2 출력 / 불린 + 숫자 = 숫자 / true는 숫자로 1이다.

이와 같이 사용자의 동의 없이 연산자 좌 우의 값을 비교하여 데이터타입을 자동으로 결정하는 것이다.

 

두번쨰로 명시적 형 변환은 사용자가 직접 스크립트를 이용해 메소드를 통해 어떤 형으로 바꿀지 명시해 주는 것이다.

// 문자 => 숫자
val a = '123.456'
parseInt(a)		// 123	//parseInt()는 원하는 숫자를 특정 진법에 맞추어 변환하는 것이다.
parseFloat(a)	// 123.456
Numver(a)		// 123.456

// 숫자 => 문자
var b = 15
String(b)		//'15'
b.toString()	//'15'
b.toString(16)	//'f' 	//16진수 문자형 변환

위와같이 의도적으로 변경할 때를 명시적 형 변환이라 칭한다.

 

==와 ===

=== : 양 측의 값과 자료형까지 모두 비교하여 둘 다 일치 했을시 true를 반환하고, 하나라도 일치하지 않으면 false를 반환함.

== : 양측의 값만 비교하여 값이 일치하면 true를 반환하고, 값이 다르면 false를 반환한다. ==는 암시적 형 변환을 일으킨다.

 

undefined와 null의 미세한 차이는?

undefined는 변수를 선언하였으나, 값을 할당하지 않은 상태를 의미한다.

null은 변수를 선언하였고, 값도 할당한 상태이다. 이는 보통 사용자가 의도적으로 값을 비울 때 사용된다.

 

'1차 공부 > JavaScript' 카테고리의 다른 글

reduce()  (0) 2022.11.22
실습과제  (0) 2022.11.19
호이스팅(hoisting)과 TDZ(temporal dead zone)은 무엇일까?  (0) 2022.11.19
JavaScript 객체와 불변성이란?  (0) 2022.11.19
변수 선언과 대입연산자, 자료형  (0) 2022.11.19