객체가 특정 클래스에서 상속되는 경우 JavaScript의 instanceof 연산자는 true를 반환합니다. 그러나 문자열이나 숫자와 같은 특정 리터럴은 이 규칙을 무시하고 비교 인스턴스에 대해 false를 반환하는 것처럼 보입니다. 왜 그럴까요?
이러한 이상 현상을 이해하는 열쇠는 프리미티브와 객체를 구별하는 데 있습니다. 문자열, 숫자, null, 정의되지 않음 및 부울을 포함하는 기본 형식은 생성자를 사용하여 생성되지 않습니다. 반대로, 객체는 new String("foo") 또는 {}와 같은 생성자 또는 객체 리터럴을 사용하여 생성됩니다.
프리미티브의 경우, instanceof 연산자는 모든 클래스에 대해 false를 반환합니다. 이는 프리미티브가 어떤 클래스의 인스턴스도 아니고 어떤 프로토타입에서도 상속되지 않기 때문입니다. 예:
<code class="js">"foo" instanceof String // false 123 instanceof Number // false</code>
RegExp 리터럴은 기본 형식임에도 불구하고 이 규칙의 예외입니다. RegExp 인스턴스의 경우 true를 반환합니다. 마찬가지로, 배열 리터럴은 Array 인스턴스에 대해 true를 반환합니다.
Null 및 정의되지 않음은 instanceof와 함께 특별한 동작을 갖는 고유한 프리미티브)입니다. Object를 포함한 모든 클래스에 대해 false를 반환합니다. 이는 기술적으로 객체가 아니라 고유한 데이터 유형을 갖기 때문입니다.
동작 인스턴스의 불일치는 혼란스럽고 예상치 못한 결과를 초래할 수 있습니다. 결과. 이러한 문제를 방지하려면 일반적으로 변수 유형을 결정하기 위해 instanceof 대신 typeof 검사를 사용하는 것이 좋습니다. 예:
<code class="js">var foo = "string"; typeof foo === "string" // true</code>
위 내용은 JavaScript의 'instanceof'가 기본 요소에 대해 다르게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!