Read 'You don't know JS' and write a summary.
View the Project on GitHub ragubyun/you-dont-know-js-summary
총 7가지
object를 제외한 이들을 ‘원시타입primitives‘이라 한다.
typeof 결과의 타입은 string 타입
typeof number === 'string'; // true
null
typeof null === 'object'; // true -> null 값 확인 안됨
var a = null;
!a && typeof a === 'object'; // true -> null 값을 정확하게 확인하려면 조건이 하나 더 필요하다.
function
typeof function a() {} === 'function'; // true
object의 하위타입
호출 가능한 객체(내부 프로퍼티 call로 호출할 수 있는 객체)
함수에 선언된 인자 개수는 함수 객체의 length 프로퍼티로 알 수 있다.
function a(b, c) {}
a.length; // 2
배열
typeof [1, 2, 3] === 'object' // true
object의 하위 타입
키로 숫자 인덱스를 가지며 length 프로퍼티가 자동으로 관리되는 등, 추가특성을 가진 객체
값에는 타입이 있지만, 변수에는 따로 타입이 없다.
변수는 언제라도, 어떤 형태의 값이라도 가질 수 있다.
var a;
a; // undefined
b; // ReferenceError: b is not defined
var a;
typeof a; // 'undefined'
typeof b; // 'undefined'
b는 분명 선언하지 않은 변수인데 typeof b를 해도 브라우저는 오류 처리를 하지 않는다.
typeof만의 독특한 안전 가드
여러 스크립트 파일의 변수들이 전역 네임스페이스namespace를 공유할 때 typeof의 안전 가드는 의외로 쓸모가 있다.
// DEBUG 전역변수가 있는지 확인하는 경우
if (DEBUG) { // ReferenceError: DEBUG is not defined
console.log('디버깅을 시작합니다');
}
if (typeof DEBUG !== 'undefined') { // 안전
console.log('디버깅을 시작합니다');
}