You don't know JS 책을 읽고 정리한 글입니다.
타입이란 자바스크립트 엔진, 개발자 모두에게 어떤 값을 다른 값과 분별할 수 있는, 고유한 내부 특성의 집합이다.
typeof undefined === "undefined" // true
typeof 43 === "number" //true
null 이외의 내장 타입들은 typeof의 반환값과 1:1 매칭된다.
typeof null === "object" // true
하지만 null의 typeof 연산 결과는 null이 아니다.
null은 falsy한 원시 값이지만 타입은 object이다.
(++ falsy : boolean으로 강제변환 시 false가 되는 값, undefined, null 등)
typeof
는 JS의 내장 타입 7가지만을 반환하는 것이 아니다.
typeof funtion sum(){...} ==="function" // true
이처럼 함수의 값을 확인하고자 하면 "function"이라는 문자열을 반환한다.
함수는 object의 하위타입에 속하며 더 구체적으로 말하자면 호출가능한 객체이다.
객체이기 때문에 함수는 property를 가질 수 있다.
function sum(a, b) {
return a + b;
}
console.log(sum.length); // 2
이처럼 function.length는 해당 함수의 인자 개수이다.
값에는 타입이 있지만 변수에는 따로 타입이 없다.
자바스크립트는 타입 강제를 하지 않으며 변수 값이 쭉 하나의 타입만 가질 필요가 없다.
자바스크립트에서 undefined와 undelcared는 다른 개념이다.
하지만 typeof 연산 결과는 동일하다.
let a;
console.log(typeof a); // "undefined"
console.log(typeof b); // "undefined"