1.2 값은 타입을 가진다

Nomade_Simia·2021년 11월 6일
0

📌이번에는 JS가 타입을 처리하는 방법을 알아 보자!


JS는 신기한 특징이 있다. JS의 에는 타입이 존재하지만 변수에는 따로 타입이 존재하지 않는다.
변수는 언제라도, 어떤 형태의 값이라도 가질 수 있다.

💡 값 => 타입 0 변수 => 타입 X

  • JS는 '타입 강제'를 하지 않는다. 변수값이 처음에 할당된 값과 동일한 타입일 필요가 없다.

  • 42는 내장된 숫자 타입의 값이고, 이 타입은 절대 바꿀 수 없다. "42"는 문자열 타입의 값이지만 숫자 42에서 강제 변환하여 생성할 수 있다. (추후에 공부)

따라서 변수에 typeof 연산자를 사용하는 것은 이 변수의 타입이 무엇이니?"가 아닌 "이 변수의 들어 있는 값의 타입은 무엇이니?"와 같은 말이다.


💻 code

var a = 42;
typeof a; // "number"

a = true;
typeof a; // "boolean"

typeof typeof a; // "string"

📌 값이 없는(undefined) vs 선언되지 않은(undeclared)

값이 없는 변수의 값은 undefined이고, typeof 결과는 "undefined"이다.


💻 code

var a;
typeof a; //"undefined"

var b = 42;
var c;

b = c;
typeof b; //"undefined"
typeod c; //"undefined"

undefinedundeclared를 동의어로 생각하기 쉬운데, JS에서 둘은 완전 다른 개념이다.

"undefined"는 접근 가능한 스코프에 변수가 선언되었으나 현재 값이 할당되지 않은 상태이고 "undeclared"는 스코프에 변수 자체가 선언되지 않은 상태를 의미한다.


💻 code

var a;
a; // "undefined"
b; // ReferenceError : b is not defined

여기서 에러 메세지가 혼동된다. 🤮
"b is not defined"란 말은 결국 "be is undefined"가 아닌가?

💡 undefinedis not defined는 의미가 완전히 다르다는것을 기억하자.

선언되지 않은 변수의 typeof값은 더 가관이다. 🤬


💻 code

var a;
typeof a; // "undefined"
typeof b; // "undefined"

typeof로 선언되지 않은 변수를 "undeclared" 정도로 처리한다면 "undefined"인 변수와 충동할 일이 없었을텐데..

저자는 이를 typeof만의 "안전 가드"라고 설명한다.

🚪 마치며


오늘은 JS의 타입처리 방법과 "undefined""undeclared"의 차이를 알아보았다.

책에선 typeof의 안전가드를 이용해 선언되지 않은 변수 사용팁이 적혀있는데, 아직 필자의 수준에선 완벽히 이해하기 부담스러운 내용이라 다음에 서술하도록 하겠다.

특히 "undefined""undeclared"의 차이는 수많은 버그를 만들어 낼듯 하므로 주의해서 코딩할 필요가 있음을 기억하자 🔥🔥🔥

profile
코딩 잘하고 싶은 코딩몽키

0개의 댓글