JavaScript에서 void 0이 필요하지 않습니다.

JavaScript 코드, 특히 이전 레거시 코드에서 때때로 void 0 표현식을 찾을 수 있습니다.

void operator은 식을 평가하고 기본 값undefined을 반환합니다. void 00 를 평가하고 아무것도 하지 않은 다음 undefined 를 반환합니다. 사실상 undefined 의 별칭입니다.

void 0이 정의되지 않은 별칭으로 사용되는 이유는 무엇입니까?



JavaScript의 단점 중 하나는 undefined가 예약어가 아니라는 것입니다. 대신 global object 의 속성입니다.

ES5(2009) 이전에는 undefined 전역 속성을 수정할 수 있었는데, 이로 인해 undefined 에 대한 예기치 않은 동작이 발생할 수 있었습니다.

다음 예제를 고려하십시오(최신 JavaScript 엔진에서는 작동하지 않음).

// Pre-ES5 example - does not work in modern JS engines:

// changes property 'undefined' on the global object:
undefined = "something else"; 

// potentially in some other JavaScript file or script section:
if (aVariable === undefined) {
  // aVariable is equal to "something else", 
  // but not to the primitive value 'undefined'
  doSomething();
}

undefined 전역 수정은 스크립트 태그를 통해 가져온 라이브러리와 같은 타사 코드에서도 발생할 수 있습니다. void 0는 항상 실제 프리미티브 값undefined을 반환하므로 ES5 이전에는 일반적으로 undefined 전역 속성의 재정의에 대해 코드를 안전 장치로 만들기 위해 사용되었습니다.

ES5 이후의 전역 속성 '정의되지 않음'



전역 객체에서 undefined가 수정될 수 있는 문제가 커서 JavaScript 표준이 변경되었습니다.
ES5에서는 전역 속성undefined이 읽기 전용이 되었습니다. 최신 JavaScript에서는 값을 변경하려고 시도해도 아무 일도 일어나지 않습니다.

globalThis.undefined = "something else";
console.log(undefined); // prints undefined in modern browsers


정의되지 않음은 여전히 ​​로컬 변수에 의해 가려질 수 있습니다.



그러나 undefined 전역 속성을 더 이상 변경할 수 없지만 undefined는 여전히 JavaScript에서 예약된 키워드가 아닙니다. 따라서 여전히 로컬 변수에 의해 가려질 수 있습니다.

const undefined = "something else";
let check = aVariable === void 0; // void 0 is needed here


이름이 undefined인 지역 변수를 갖는 것은 피하고 싶은 함정입니다. ESLint rule no-undefined은 변수 이름으로 정의되지 않은 사용을 허용하지 않으며 그림자 문제를 방지합니다.

무효 0이 번들 크기를 줄이는 데 도움이 될 수 있습니까?



void 0undefined 보다 짧습니다. JavaScript 번들 크기는 빠르게 로드되는 웹 사이트를 만드는 데 필수적이며 몇 바이트를 줄이는 것이 도움이 될 수 있습니다.

그러나 기본 코드 크기 최적화는 제품 번들링 프로세스의 일부로 Terser과 같은 축소기에 맡기는 것이 가장 좋습니다. 다양한 최적화를 수행할 수 있으며 소스 코드는 void 0 대신 undefined를 사용하는 것과 같은 수동 코드 크기 최적화 없이 더 읽기 쉽습니다.

모던 자바스크립트에서 void 0을 피하세요



요약하면 최신 브라우저와 JavaScript 엔진에서는 더 이상 void 0를 사용할 이유가 없습니다.
  • 글로벌 속성undefined은 ES5 및 최신 환경에서 변경할 수 없습니다
  • .
  • 이름이 undefined인 지역 변수는 ESLint rule no-undefined에서 허용되지 않을 수 있습니다.
  • 축소기는 프로덕션 번들
  • 을 생성할 때 undefinedvoid 0로 대체할 수 있습니다.

    반대로 void 0void 0의 의미를 알고 동일한 개념(void 0)에 대해 다른 용어(undefined , undefined )를 처리해야 하기 때문에 JavaSCript 코드를 읽고 이해하기 어렵게 만듭니다.

    TLDR: undefined를 사용하고 불필요한 합병증void 0을 제거할 수 있습니다.

    좋은 웹페이지 즐겨찾기