Instanceof Conundrum: 일부 리터럴이 일치하지 않는 이유
Instanceof 연산자는 JavaScript의 기본임에도 불구하고 특정 연산자와 함께 사용될 때 수수께끼 같은 동작을 보일 수 있습니다. 리터럴. 특히 문자열, 부울 및 숫자 리터럴은 해당 생성자에 대해 테스트할 때 모두 false로 평가됩니다.
<code class="js">"foo" instanceof String //=> false "foo" instanceof Object //=> false true instanceof Boolean //=> false true instanceof Object //=> false false instanceof Boolean //=> false false instanceof Object //=> false 12.21 instanceof Number //=> false /foo/ instanceof RegExp //=> true</code>
리터럴이 해당 유형의 인스턴스일 것으로 예상하기 때문에 이 동작은 놀랍습니다. 그러나 불일치의 원인은 원시형과 객체의 구별에 있습니다.
Primitivism at Play
문자열, 숫자, 부울과 같은 JavaScript 원시형은 객체 생성자를 통해 생성되지 않은 내장 유형입니다. 대신 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>
위에서 설명한 것처럼 String 생성자를 사용하면 String 객체가 생성되며, 이는 instanceof로 테스트할 때 true로 평가됩니다. 그러나 원시 문자열 리터럴 "coral"은 이 동작을 상속하지 않습니다.
대체 유형 검사 방법
기본 문자열에 대한 인스턴스 오브의 수수께끼 동작으로 인해 채택이 이루어졌습니다. 유형 검사를 위한 대체 방법:
결론적으로, 프리미티브를 사용한 인스턴스of의 동작은 JavaScript의 고유한 유형 시스템의 결과입니다. 이는 혼란을 초래할 수 있지만 기본 요소와 객체의 차이점을 이해하면 개발자가 이러한 미묘한 차이를 효과적으로 탐색하는 데 도움이 될 수 있습니다.
위 내용은 문자열, 부울 및 숫자 리터럴이 'instanceof' 테스트에 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!