ES 규범 학 자 바스 크 립 트 (1): 왜 undefined 는 값 을 부여 할 수 있 고 null 은 안 됩 니까?

1747 단어 es5자바 script
문 제 를 제기 하 다
다음 코드:
undefined = 123;
null = 123; //   :Uncaught Reference Error

첫 번 째 문 구 는 실행 할 수 있 습 니 다. 비록 할당 이 성공 하지 못 했 지만.제2 조 문장 오류.왜 그 럴 까요?undefinednull 는 어떤 차이 가 있 습 니까?
문 제 를 해결 하 다
ES 규범 을 읽 은 후에 원래 이런 것 을 발견 했다.
  • undefined, NaN, Infinity 모두 전체 대상 window 의 속성 이다.속성 이 니 값 을 부여 할 수 있 습 니 다.그러나 이 세 가지 속성 은 쓸 수 없 는 속성 이다. 즉, 그들의 내부 특성 [[writable]]false 이기 때문에 할당 이 유효 하지 않다.
  • null 는 글자 의 양 (literal) 으로 정확하게 말 하면 Null 글자 의 양 이 라 고 한다.truefalse 와 유사 하 다.그것들 은 모두 자 바스 크 립 트 의 보존 자 에 속한다.다시 말 하면 모두 값 입 니 다. 숫자 값 123, 문자열 값 'foobar' 와 마찬가지 로 값 을 부여 할 수 없습니다.

  • 좀 더 말 하 다
  • undefined 하나의 속성 일 뿐 언어의 보존 글자 가 아 닌 이상 변수의 이름 으로 사용 할 수 있 습 니까?물론 가능 합 니 다. undefined 라 는 변수 나 함 수 를 사용자 정의 할 수 있 지만 전체 역할 영역 에 두 지 않도록 주의 하 십시오.예 를 들 어
    function foo() {
         var undefined = 10;
         console.log(undefined);
    }
    foo(); //   10
  • ES5 에 추 가 된 방법 Object.getOwnPropertyDescriptor 방법 을 통 해 undefinedwindow 대상 의 읽 기 전용 속성 임 을 증명 할 수 있다.
    Object.getOwnPropertyDescriptor(window, 'undefined');
    
    /**   :Object {value: undefined, writable: false,
    enumerable: false, configurable: false} **/
  • 엄격 한 모델 에서 undefined 에 게 할당 하면 잘못 보고 할 수 있다.엄격 한 모드 에서 대상 에 게 읽 기 전용 속성 할당 을 금지 하기 때문이다.
  • null 이런 원시 유형 이 취 할 수 있 는 유일한 값 이 라 고 불리 지만:
     typeof null; //   "object"
  • 참고 문서
  • 15.1.1.3 undefined
  • 7.6.1 Reserved Words
  • 좋은 웹페이지 즐겨찾기