일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- woff2
- level2
- 부자의 그릇
- keyup
- decodeURIComponent
- custom font
- 코딩테스트
- 택배 배달과 수거하기
- 리코쳇 로봇
- 이즈미 마사토
- window.onload
- js
- 2023 카카오 블라인드 채용
- keypress
- fontweight
- 1권 1진리
- 연속된 부분 수열의 합
- react native
- 내성적인 건물주
- TypeScript
- 저는 이 독서법으로 연봉 3억이 되었습니다.
- css
- 프로그래머스
- 알고리즘
- DOMContentLoaded
- 요격 시스템
- for ... of
- 2023 KAKAO BLIND RECRUITMENT
- for ... in
- 투포인터
- Today
- Total
스카이코의 세상
typeof vs instanceof 본문
typeof
피연산자의 타입을 알 수 있는 연산자입니다. 연산자 이므로 괄호를 사용하지 않으며 변수나 값의 자료형을 문자열로 반환합니다. 반환 값들은 number, string, function, boolean, object, undefined 6가지가 있습니다.
console.log(typeof 5); // 'number'
console.log(typeof "text"); // 'string'
console.log(typeof function(){}); // 'function'
console.log(typeof true); // 'boolean'
console.log(typeof {}); // 'object'
console.log(typeof undefined); // 'undefined'
이때 undefined의 자료형이 'undefined'이기 때문에 null의 자료형도 'null'로 예상할 수 있는데 null의 typeof값은 'object'입니다. 이는 자바스크립트 초기에 등장한 버그이지만 현재 자바스크립트가 많은 발전을 이루면서 버그를 수정할 수 없는 상황이라고 판단되어 그대로 값을 유지한다고 합니다.
const N = null;
console.log(typeof N); // 'object'
instanceof
변수나 값이 특정 객체의 인스턴스인지를 판단하여 boolean타입으로 반환하는 비교 연산자입니다. 클래스의 타입을 감지하는 역할을 합니다. 이때 해당 변수나 값이 사용하고 있는 prototype의 chain을 계속 비교하며 모두 해당하지 않으면 false, 하나라도 있다면 true를 반환합니다.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const person = new Person('스카이코', 27);
console.log(person instanceof Person); // true
그리고 만약 참조 타입이라면 결국 최상위 prototype이 객체이므로 모두 true를 반환합니다.
console.log(person instanceof Object); // true
문제
typeof, instanceof에 관하여 헷갈리는 부분이 몇몇 존재합니다. 몇가지를 예시로 들겠습니다.
1. 다음 결과 값은 어떻게 될까요?
console.log("string" instanceof String);
console.log(5 instanceof Number);
console.log(true instanceof Boolean);
위 값은 모두 객체가 아닌 primitive value이므로 모두 false 값을 갖습니다.
2. 다음 결과 값은 어떻게 될까요?
class Question {}
console.log(typeof Question)
console.log(typeof new Question())
class의 경우는 ES6에 등장한 문법으로 생성자 함수를 기반으로 합니다. 그러므로 typeof A의 값은 'function'입니다.
class로 생성한 값은 객체입니다. 그러므로 typeof new A()의 값은 'object'입니다.
'IT > Javascript' 카테고리의 다른 글
[Javascript] for ... in, for ... of 차이 비교 (0) | 2023.03.23 |
---|---|
URL 인코딩 - encodeURI(), encodeURIComponent(), decodeURI(), decodeURIComponent() (2) | 2023.01.18 |
문서의 로드 window.onload, load, DOMContentLoaded (0) | 2023.01.12 |