>  기사  >  웹 프론트엔드  >  'instanceof'가 JavaScript의 리터럴과 다르게 동작하는 이유는 무엇입니까?

'instanceof'가 JavaScript의 리터럴과 다르게 동작하는 이유는 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-11-03 14:45:03309검색

Why Does `instanceof` Behave Differently with Literals in JavaScript?

instanceof와 리터럴의 불일치

JavaScript의 instanceof 연산자는 객체가 클래스의 인스턴스인지 확인하려는 목적에도 불구하고 일부 오류를 나타냅니다. 리터럴의 예상치 못한 동작. 이 기사에서는 이러한 불일치를 자세히 살펴보고 그 이유를 밝힙니다.

기본 리터럴과 객체 리터럴

문자열, 숫자, 부울과 같은 기본 형식이 존재합니다. JavaScript 내에서 생성된 객체와 비교하여 고유한 유형 카테고리입니다. 이러한 구별은 다음 예에 설명되어 있습니다.

<code class="js">var color1 = new String("green");
color1 instanceof String; // returns true
var color2 = "coral";
color2 instanceof String; // returns false (color2 is not a String object)</code>

color1은 생성자에서 생성된 String의 인스턴스인 반면 color2는 기본 문자열 리터럴입니다.

instanceof를 사용한 False 반환

예기치 않게도 대부분의 경우에 instanceof가 false를 반환합니다. 리터럴:

<code class="js">"foo" instanceof String // false
true instanceof Boolean // false
12.21 instanceof Number // false</code>

이러한 기본 요소는 해당 래퍼 개체의 인스턴스로 간주되지 않습니다.

배열 및 개체의 예외

배열 및 개체 리터럴 규칙의 예외:

<code class="js">[0,1] instanceof Array // true
{0:1} instanceof Object // true</code>

대우됩니다. 해당 생성자 함수의 인스턴스로 사용됩니다.

불일치의 이유

다른 인스턴스 동작은 의도적인 것입니다. JavaScript는 기본 요소를 객체가 아닌 불변 값으로 간주합니다. 따라서 어떤 클래스에서도 상속받지 않습니다. 배열 및 객체 리터럴에 대한 예외는 객체 조작을 단순화하고 생성자 함수와의 일관성을 유지하기 위해 만들어졌습니다.

결론

JavaScript 내에서 생성된 기본 리터럴과 객체는 차이점이 있습니다. instanceof 연산자를 사용한 동작. 이러한 구별은 특정 사용 사례에 따라 직관에 어긋나고 편리할 수 있습니다. 이러한 미묘한 동작을 이해함으로써 개발자는 JavaScript 코드에서 instanceof를 효과적으로 활용할 수 있습니다.

위 내용은 'instanceof'가 JavaScript의 리터럴과 다르게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.