- 느슨한 타입(loosely typed)의 동적(dynamic) 언어
자바스크립트는 컴파일이 아닌 런타임 시 변수의 타입이 결정된다.
그렇기 때문에 이 변수가 어떤 자료형인지 지정해주지 않아도 되는 것이다.
변수의 형태가 어떤 것인지 따로 지정해 주지 않기 때문에 <느슨한 형태>
또한 변수의 값은 언제든지 재할당 해줄 수 있기 때문에 <동적언어>
두 개를 합쳐서 <느슨한 형태의 동적언어>인 것이다
- JavaScript 형 변환
함수와 연산자에 전달되는 값은 대부분 적절한 자료형으로 자동 변환됩니다. 이런 과정을 "형 변환(type conversion)"이라고 합니다.
alert가 전달받은 값의 자료형과 관계없이 이를 문자열로 자동 변환하여 보여주는 것이나, 수학 관련 연산자가 전달받은 값을 숫자로 변환하는 경우가 형 변환의 대표적인 예시입니다.
이 외에, 전달받은 값을 의도를 갖고 원하는 타입으로 변환(명시적 변환)해 주는 경우도 형 변환이라고 할 수 있습니다.
출처: https://ko.javascript.info/type-conversions
즉, <함수와 연산자에 전달되는 값이 적절한 형태로 자동 변환되는 것>
<의도를 갖고 원하는 타입으로 변환시키는 것> 이 두개를 가리켜 형 변환 이라고 한다.
==, ===
==와 ===는 두 개의 값이 서로 같은지를 확인하는 비교 연산자이다.
차이점은
==
===
<느슨한 타입의 동적 언어>의 문제점
데이터의 양이 많아지면 타입이 올바른지 체크하는 것이 까다롭다.
오가는 과정에서 서로의 데이터 타입이 맞지 않아 타입 에러가 날 수 있음.
// 백엔드 개발자가 전달한 명세서 예시
{
id: number,
product_name: string,
price: number
}
// 프런트 개발자가 전달한 데이터 예시
{
id: 12345,
product_name: 'water melon',
price: '12,000'
}
😥price의 타입이 다르기 때문에 오류가 발생한다!😥
좋은 예시가 있어서 가져와 봤다.
보완 방법
TypeScript를 사용하여 보완 가능.
때문에 데이터 타입이 달라서 발생하는 문제를 수월하게 해결이 가능
undefined와 null의 차이
우선, undefined와 null의 차이점을 공부하면서 내가 제대로 이해한 것이 맞는지 확실하지가 않다. 내가 맞게 이해했는지에 대한 확신이 생기면 이 부분은 지울 것이다.
즉, undefined와 null 둘 다 값이 없다는 것을 가리킨다.
그렇다면 둘 다 값이 없는 것인데 왜 null과 undedfined를 구분해 놓았을까?
null과 undefined를 구분해 놓은 이유는
명시적으로 없음을 나타내기 위해서이다.
let a; //값을 대입하지 않음
let b = undefined; //값을 대입함
a // undefined
b // undefined (??)
----------------------------------------
let obj1 = {}; //속성을 지정하지 않음
let obj2 = {prop: undefined}; // 속성을 지정함
obj1.prop; // undefined
obj2.prop; // undefined (??)
4개의 값은 전부 undefined로 출력되지만 값이 비어있다는 것을 표현하려면 undefined 보다는 null이 더 명시적이다.