글쓰기에 앞서 글쓴이는 코딩에 미숙한 사람임을 알립니다.
더 구글링 해보면 더욱 더 자세한 내용이 공식문서 혹은 블로그에 정리 되어 있을 수 있습니다.
느슨한 타입(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 |