>  기사  >  웹 프론트엔드  >  문자열, 부울 및 숫자 리터럴이 'instanceof' 테스트에 실패하는 이유는 무엇입니까?

문자열, 부울 및 숫자 리터럴이 'instanceof' 테스트에 실패하는 이유는 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-31 21:51:02550검색

Why Do String, Boolean, and Number Literals Fail the `instanceof` Test?

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"은 이 동작을 상속하지 않습니다.

대체 유형 검사 방법

기본 문자열에 대한 인스턴스 오브의 수수께끼 동작으로 인해 채택이 이루어졌습니다. 유형 검사를 위한 대체 방법:

  • typeof 연산자: typeof 연산자는 변수의 기본 유형을 반환합니다(예: typeof "foo" === "string").
  • Object.prototype.toString: 이 메소드는 유형 검사에도 사용할 수 있습니다(예: Object.prototype.toString.call("foo") === "[object String ]".

결론적으로, 프리미티브를 사용한 인스턴스of의 동작은 JavaScript의 고유한 유형 시스템의 결과입니다. 이는 혼란을 초래할 수 있지만 기본 요소와 객체의 차이점을 이해하면 개발자가 이러한 미묘한 차이를 효과적으로 탐색하는 데 도움이 될 수 있습니다.

위 내용은 문자열, 부울 및 숫자 리터럴이 'instanceof' 테스트에 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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