'웹 개발자를위한 전문 Javascript'4 장을 읽고 5 가지 기본 유형은 정의되지 않음, 널, 부울, 숫자 및 문자열이라는 것을 알려줍니다.
만약이 null
이유는 무엇입니까, 원시적 인 typeof(null)
수익 "object"
?
그것은 그것이 null
참조로 전달 된다는 것을 의미 하지 않습니까 (여기서는 모든 객체가 참조로 전달된다고 가정합니다).
'웹 개발자를위한 전문 Javascript'4 장을 읽고 5 가지 기본 유형은 정의되지 않음, 널, 부울, 숫자 및 문자열이라는 것을 알려줍니다.
만약이 null
이유는 무엇입니까, 원시적 인 typeof(null)
수익 "object"
?
그것은 그것이 null
참조로 전달 된다는 것을 의미 하지 않습니까 (여기서는 모든 객체가 참조로 전달된다고 가정합니다).
답변:
운영자 의 행동에 대한 MDN 페이지typeof
에서 :
null
// JavaScript가 시작된 이래로 typeof null === '개체';JavaScript의 첫 번째 구현에서 JavaScript 값은 유형 태그와 값으로 표시되었습니다. 객체의 유형 태그는 0입니다
null
. NULL 포인터 (대부분의 플랫폼에서 0x00)로 표시되었습니다. 결과적으로 null은 유형 태그로 0을 가지므로 "object"typeof
반환 값입니다. ( 참고 )ECMAScript에 대한 수정 (옵트 인을 통해)이 제안되었지만 거부되었습니다 . 결과는
typeof null === 'null'
이었습니다.
만약이
null
이유는 무엇입니까, 원시적 인typeof(null)
수익"object"
?
때문에 사양이 그렇게 말한다 .
11.4.3
typeof
운영자UnaryExpression :
typeof
UnaryExpression 프로덕션 은 다음과 같이 평가됩니다.
- 하자 발은 평가의 결과 UnaryExpression을 .
- 경우 유형 ( 발은 )는 참조 후,
가. 경우 IsUnresolvableReference ( 발은 )는 사실 , "반환undefined
".
비. 하자 발 수 GetValue ( 발 ).- 표 20에 따라 Type ( val )에 의해 결정된 문자열을 리턴하십시오 .
typeof
은 무언가에 대해 메소드를 호출 할 수 있는지 여부에 대해서는 아무 것도 알려주지 않습니다.
null
및 이외의 다른 방법으로 메소드를 호출 할 수 있습니다 undefined
.
.
또는 [ ]
).
지적 된 바와 같이, 스펙은 그렇게 말한다. 그러나 JavaScript 구현은 ECMAScript 사양을 작성하기 이전에 시작되었으며이 사양은 초기 구현의 우화를 수정하지 않도록주의를 기울 였기 때문에 처음에 왜 이런 방식으로 수행되었는지에 대한 합법적 인 질문이 남아 있습니다. Douglas Crockford 는 이것을 실수라고 부릅니다 . Kiro Risk 는 다소 의미가 있다고 생각합니다 .
뒤에 숨겨진 이유는와
null
달리undefined
객체가 나타나는 곳에 자주 사용되기 때문입니다. 즉,null
종종 객체에 대한 빈 참조를 나타내는 데 사용됩니다. Brendan Eich가 JavaScript를 만들었을 때도 동일한 패러다임을 따르고 "개체"를 반환하는 것이 합리적이었습니다. 실제로 ECMAScript 사양은 의도적으로 객체 값이 없음을 나타내는 기본 값null
으로 정의 합니다 (ECMA-262, 11.4.11).
책에서 YDKJS
이것은 JS의 오랜 버그이지만 결코 수정되지 않을 것입니다. 웹에서 너무 많은 코드는 버그에 의존하므로 수정하면 훨씬 더 많은 버그가 발생합니다!
만약이
null
이유는 무엇입니까, 원시적이다typeof(null)
"반환object
"?
요컨대 ECMAScript의 버그이며 유형은 null
참조 : https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null
이 동작을 만든 일부 코드에 관심이있는 사람들을 위해이 링크는 guyz .... 왜 typeof null이 암시 적 객체인지