[javascript] typeof가 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.3typeof 운영자

UnaryExpression : typeof UnaryExpression 프로덕션 은 다음과 같이 평가됩니다.

  1. 하자 발은 평가의 결과 UnaryExpression을 .
  2. 경우 유형 ( 발은 )는 참조 후,
       가. 경우 IsUnresolvableReference ( 발은 )는 사실 , “반환 undefined“.
       비. 하자 GetValue ( ).
  3. 표 20에 따라 Type ( val )에 의해 결정된 문자열을 리턴하십시오 .

여기에 이미지 설명을 입력하십시오


답변

지적 된 바와 같이, 스펙은 그렇게 말한다. 그러나 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


답변

JavaScript에서 null은 “아무것도 없습니다”. 존재하지 않는 것으로 추정됩니다. 불행히도, JavaScript에서 null의 데이터 유형은 객체입니다. JavaScript에서 typeof null이 객체라는 버그로 간주 할 수 있습니다. null이어야합니다.


답변

JavaScript에서 typeof null은 ‘object’이므로 null이 객체임을 잘못 제안합니다. 이것은 버그이며 불행히도 수정할 수없는 버그입니다. 기존 코드를 손상시킬 수 있기 때문입니다.