JavaScript에서 void 0이 필요하지 않습니다.
void 0
표현식을 찾을 수 있습니다.void operator은 식을 평가하고 기본 값undefined을 반환합니다.
void 0
는 0
를 평가하고 아무것도 하지 않은 다음 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 0
는 undefined
보다 짧습니다. JavaScript 번들 크기는 빠르게 로드되는 웹 사이트를 만드는 데 필수적이며 몇 바이트를 줄이는 것이 도움이 될 수 있습니다.그러나 기본 코드 크기 최적화는 제품 번들링 프로세스의 일부로 Terser과 같은 축소기에 맡기는 것이 가장 좋습니다. 다양한 최적화를 수행할 수 있으며 소스 코드는
void 0
대신 undefined
를 사용하는 것과 같은 수동 코드 크기 최적화 없이 더 읽기 쉽습니다.모던 자바스크립트에서 void 0을 피하세요
요약하면 최신 브라우저와 JavaScript 엔진에서는 더 이상
void 0
를 사용할 이유가 없습니다.undefined
은 ES5 및 최신 환경에서 변경할 수 없습니다undefined
인 지역 변수는 ESLint rule no-undefined에서 허용되지 않을 수 있습니다.undefined
를 void 0
로 대체할 수 있습니다.반대로
void 0
는 void 0
의 의미를 알고 동일한 개념(void 0
)에 대해 다른 용어(undefined
, undefined
)를 처리해야 하기 때문에 JavaSCript 코드를 읽고 이해하기 어렵게 만듭니다.TLDR:
undefined
를 사용하고 불필요한 합병증void 0
을 제거할 수 있습니다.
Reference
이 문제에 관하여(JavaScript에서 void 0이 필요하지 않습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/p42/you-dont-need-void-0-663텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)