[JS]변수, 표현식과 문, 데이터타입, 타입 변환 - 타입 변환이 필요할 때
변수
메모리 공간에 값을 식별할 수 있는 고유한 이름을 '변수 이름' = 식별자
변수에 저장된 값을 변수 값
변수에 값을 저장하는 것을 할당
변수에 저장된 값을 읽어 들이는 것을 참조
console.log(score) // undefined
var score; // 변수 선언문
첫 줄에서 참조에러가 발생해야 하는데 undefined가 발생하는 이유는 호이스팅 때문!
표현식과 문
**문은 프로그램을 구성하는 기본 단위이자 최소 실행 단위
토큰이란 문법적인 의미를 가지며 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소
문에는 표현식인 문과 표현식이 아닌 문이 있다.
표현식인 문은 값으로 평가될 수 있는 문이고, 표현식이 아닌 문은 그렇지 않은 문이다.
예를 들어, 변수 선언문은 표현식이 아니다.
할당문은 표현식이다.
데이터 타입
원시 타입 중
undefiend => var 키워드로 선언된 변수에 암묵적으로 할당되는 값
null => 값이 없다는 것을 의도적으로 명시할 때 사용하는 값
**데이터 타입이 필요한 이유
1. 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
2. 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결졍하기 위해
3. 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
타입 변환
**타입 변환이 필요할 때
다음은 예전 우테코 프리코스 문제 중 친구의 로또추첨기 코드 중 일부이다.
class Validator {
static amount(callback){
return (amount) => {
if (amount.trim().length === 0 || isNaN(Number(amount-0))) {
throw new Error(NOT_NUMBER);
}
callback(amount);
}
}
amount에 -0을 해주는 이유가 뭘까?
처음 도전했을 때는 아무리 봐도 이유를 알지 못했다.
그러나 -0을 붙여주는 순간, 문자열이 숫자로 반환된다는 것을 알게 되었다.
amount가 숫자로 반환이 된다면 true를 반환, 그렇지 않다면 NaN을 반환하게 될 것이고,
이 때문에 -0을 붙이는 것이 amount가 숫자인지 아닌지를 체크할 수 있다는 것이다.
어떻게 보면 꼼수일지 모르지만, 굉장히 유용할 수 있을 것 같다.