JavaScript Reflection
- 런타임에 객체의 값 타입과 멤버의 구조를 밝히는 작업으로 Reflection을 이용하면 자바스크립트가 함수 오버로드를 지원하지 못하는 약점이 보완 가능 하다.
isPrototypeOf, hasOneProperty, for/in 등... |
타입 판별 - typeof
- 값의 타입을 판별하는 데 가장 쉽게 사용할 수 있는 연산자.
null은 == 연산자로 구분하는 것이 좋다. typeof 연산자로는 null의 구분이 불가능하다.
typeof 연산자로 null의 타입을 출력해보면 object가 출력 된다.
undefined는 ==, typeof 두 가지의 연산자가 다 구분 가능하다.
본인이 편한 것으로 구분하면 된다.
그 외에 것들은 typeof 연산자로 구분이 가능하며, 리턴 되는 값들은 위의 그림과 같다.
상세 타입 판별 - instanceof
- typeof의 연산 결과로 object를 반환하는 경우 그 객체의 좀 더 세부적인 타입 판별이 필요한 경우 사용한다.
객체 instanceof 생성자 |
위와 같은 구문으로 사용이 가능하며, 좌측 객체가 우측 생성자의 인스턴스인가를 확인하는 구문이다.
instanceof 연산자를 타입의 상속관계를 고려하여 결과를 반환한다.
사용자 정의 타입 판별 - toString 재정의
- Object의 프로토타입 객체에서 정의하고 있는 toString 메서드는 아래와 같은 형식의 문자열을 반환한다.
[object 생성자명] Object.prototype.toString(); |
사용자 정의 객체의 경우도 모두 [object Object]를 반환한다.
사용자 정의 객체릐 타입을 판별하기 위해서는 아래와 같은 작업이 필요하다.