JavaScript의 instanceof
연산자는 객체가 특정 클래스 또는 생성자 함수의 인스턴스인지를 확인하는 데 사용됩니다. 이 연산자는 주어진 객체가 특정 클래스의 인스턴스인 경우 true
를 반환하고, 그렇지 않은 경우 false
를 반환합니다.
instanceof
의 사용법은 다음과 같습니다:
object instanceof constructor
object
: 확인하려는 객체입니다.constructor
: 클래스 또는 생성자 함수입니다.instanceof
연산자는 constructor.prototype
을 확인하여 객체의 프로토타입 체인을 검사합니다. 프로토타입 체인은 객체의 상속 구조를 나타내며, constructor.prototype
을 따라 상위 클래스나 생성자 함수의 프로토타입을 거슬러 올라가며 확인합니다.
instanceof
연산자의 결과는 부모 클래스나 생성자 함수를 포함한 상위 클래스들에 대해서도 true
를 반환합니다. 이는 상속 관계를 고려하여 객체의 타입을 확인하는 데 유용합니다.
다음은 instanceof
연산자를 사용한 간단한 예제입니다:
class Animal {
constructor(name) {
this.name = name;
}
}
class Dog extends Animal {
bark() {
console.log("Woof!");
}
}
const myDog = new Dog("Buddy");
console.log(myDog instanceof Dog); // true
console.log(myDog instanceof Animal); // true
console.log(myDog instanceof Object); // true
console.log(myDog instanceof Array); // false
위 예제에서 myDog
객체는 Dog
클래스의 인스턴스입니다. 따라서 myDog instanceof Dog
는 true
를 반환합니다. 또한 Dog
클래스는 Animal
클래스를 상속받았으므로 myDog instanceof Animal
도 true
를 반환합니다. 마지막으로, 모든 객체는 Object
클래스를 상속받으므로 myDog instanceof Object
도 true
를 반환합니다. 그러나 myDog
는 Array
클래스의 인스턴스가 아니므로 myDog instanceof Array
는 false
를 반환합니다.
instanceof
연산자는 객체의 타입 확인에 유용하지만, 주의해야 할 점도 있습니다. 예를 들어, instanceof
연산자는 객체의 타입을 확인하는 데만 사용해야 하며, 원시 값에는 사용할 수 없습니다. 또한, 프로토타입 체인이 변경되면 instanceof
연산자의 결과도 변경될 수 있습니다. 이러한 상황에서는 typeof
연산자나 다른 방법을 사용하여 객체의 타입을 확인하는 것이 좋습니다.
위에서 설명한 것처럼 instanceof
연산자를 사용하여 객체가 특정 클래스 또는 생성자 함수의 인스턴스인지 확인할 수 있습니다.
단순히 생성자 객체를 비교하는 것이 아닌 서로의 프로토타입 체인
을 이용해 동일한 교차 지점
이 있는지 확인하는 연산자입니다!