2012-12-19 2 views
4

나는 두 할당 모두 a = "foo"a = new String('foo')이 같은 것이라고 생각했습니다. 그러나 이전 신고 인 경우 console.log(a instanceof Object) 또는 console.log(a instanceof String)false을 반환하고 후자의 경우에는 true을 반환합니다.자바 스크립트 객체 상속이 예상 결과를 나타내지 않음

두 가지 이유로 이상하게 보입니다. 첫째, 일반 선언 a = 'foo'을 사용해도 모든 문자열 메서드가 작동하여 String 개체에서 상속되었음을 알 수 있습니다. 둘째, a.constructorString을 반환합니다.

아무도 설명하지 못합니까?

답변

3

"foo"은 기본 리터럴입니다.

그러나 new String("foo")은 String 클래스의 인스턴스입니다.

자바 스크립트가 자동으로 그래서, String 객체에 원시 문자열 String 객체의 방법을 사용하는 것이 가능 을 기본 형식으로 변환하기 때문에

당신은 원시 값의 메소드를 호출 할 수 있습니다. 메소드가 원시 문자열에서 호출되거나 속성 조회가 발생하는 컨텍스트에서는 JavaScript가 자동으로 문자열 프리미티브를 래핑하고 메서드를 호출하거나 속성 조회를 수행합니다. (the MDN에서)

+0

당신이 프리미티브 값의 의미를 설명해 주시겠습니까? 그런데 어떻게하면 'constructor' 속성이 있습니까? – SexyBeast

+0

'JavaScript는 원시 객체를 String 객체로 자동 변환합니다 .'. 그런 다음'console.log (a instanceof String)'에 대해'true'를 반환해야합니다. 그렇습니까? – SexyBeast

+0

프리미티브 값 (부울 또는 숫자 일 수도 있음)은 단순히 인스턴스가 아닌 더 밝은 값입니다. 그러나 js 엔진을 사용하면 필요할 때 메소드를 호출하여 메소드를 호출 할 수 있습니다. 하지만 필요할 때만 (즉, 메소드 호출을해야 할 때가 아니라 instanceof를 호출 할 때). –

관련 문제