"void 0"과 "undefined"의 차이
저는 "Closure Compiler"를 사용 하고 있습니다. 펼쳐서 할 때 다음을 사용합니다.
하기 전에 :
// ==ClosureCompiler==
// @compilation_level SIMPLE_OPTIMIZATIONS
// @output_file_name default.js
// @formatting pretty_print,print_input_delimiter
// ==/ClosureCompiler==
var myObj1 = (function() {
var undefined; //<----- declare undefined
this.test = function(value, arg1) {
var exp = 0;
arg1 = arg1 == undefined ? true : arg1; //<----- use declare undefined
exp = (arg1) ? value * 5 : value * 10;
return exp;
};
return this;
}).call({});
var myObj2 = (function() {
this.test = function(value, arg1) {
var exp = 0;
arg1 = arg1 == undefined ? true : arg1; //<----- without declare undefined
exp = (arg1) ? value * 5 : value * 10;
return exp;
};
return this;
}).call({});
모두 됨 :
// Input 0
var myObj1 = function() {
this.test = function(b, a) {
a = a == void 0 ? true : a; //<-----
var c = 0;
return c = a ? b * 5 : b * 10
};
return this
}.call({}), myObj2 = function() {
this.test = function(b, a) {
a = a == undefined ? true : a; //<-----
var c = 0;
return c = a ? b * 5 : b * 10
};
return this
}.call({});
이것으로 나는 "void 0"과 "undefined"의 사용에 대한 질문을 믿습니다. 사용에 어떤 차이가 있습니까?
편집하다
"void 0"으로 정의 된 "var undefined"를 정의하고 "undedined"로 정의 된 "undefined"를 "undefined"와 "void 0"사이의 문자 수는 없습니다.
편집 II : 성능, 이 링크를 기반으로 함
IE 8 :
typeof : 228ms
정의되지 않음 없음 : 62ms
무효 0 : 57ms
Firefox 3.6 :
typeof : 10ms
정의되지 않음 : 3ms
void 0 : 3ms
Opera 11 :
typeof : 67ms
정의되지 않음 : 19ms
void 0 : 20ms
Chrome 8 :
typeof : 3ms
정의되지 않음 : 5ms
void 0 : 3ms
MDN에서 :
void
연산자는 주어진 평가expression
한 후 반환undefined
.이 연산자를 사용하면 정의되지 않은 것으로 평가되는식이 필요한 위치에 부작용을 생성하는 식을 삽입 할 수 있습니다.
void 연산자는
undefined
보통 "void(0)
"( " "과 동일)를 사용하여 기본 값 을 얻기 위해 종종 사용됩니다void 0
. 이러한 경우 전역 변수undefined
를 대신 사용할 수 있습니다 (기본값이 아닌 값에 할당되지 않았다고 가정).
폐쇄 컴파일러에 스왑 void 0
이보다 적은 문자가 포함되어 있기 때문에 undefined
, 따라서 해당하는, 작은 코드를 생산 .
Re : OP 코멘트
예, 설명서를 읽었지만 예제에서 "void 0"과 다른 "undefined"를 사용하는 경우 "google Closure"를 제공했습니다.
나는 이것이 실제로 Google Closure Compiler 의 버그 라고 생각합니다 !
간 실질만을 의미 차이 void expr
와 undefined
해당이다 ECMAScript를 (3) 상기 undefined
(세계 객체의 속성 window.undefined
반면 브라우저 환경에서)는, 기록 가능 void
조작자가 반환 undefined
값을 항상 .
undefined
걱정없이 사용하기 위해 자주 구현되는 인기있는 패턴 은 단순히 인수를 선언하고 아무것도 전달하지 않는 것입니다.
(function (undefined) {
//...
if (foo !== undefined) {
// ...
}
})();
그러면 minifier가 인수를 단일 문자 ( void 0
: 보다 짧더라도)로 축소 할 수 있습니다 . 예 :
(function (a) {
//...
if (foo !== a) {
// ...
}
})();
이전의 모든 답변에 대한 후속 조치입니다.
그들은 똑같아 보이지만 컴파일러에게는 완전히 다릅니다.
두 코드 섹션은 하나가 지역 변수 (var undefined)를 참조하기 때문에 다른 출력으로 컴파일되고 컴파일러는 정확히 한 번 사용되며 한 줄 이하이므로 단순히 인라인합니다. 두 번 이상 사용하면이 인라이닝이 발생하지 않습니다. 인라인은 "정의되지 않음"의 결과를 제공하며 "무효 0"으로 표시하는 데 더 짧습니다.
지역 변수가없는 것은 클로저 컴파일러 (사실 모든 전역 객체 속성)에 의해 자동으로 "외부"되는 전역 객체 아래의 "정의되지 않음"이라는 변수를 참조 하는 것입니다. 따라서 이름이 변경되지 않고 인라인도 수행되지 않습니다. 짜잔! 여전히 "정의되지 않음".
차이가 없습니다. 직접 시도해보십시오.
void 0 === undefined
로 평가됩니다 true
.
undefined
이다 3 자 이상, 나는 그들이 그런 식으로 사용하는 이유입니다 같아요.
참고 URL : https://stackoverflow.com/questions/4806286/difference-between-void-0-and-undefined
'ProgramingTip' 카테고리의 다른 글
GWT와 함께 작동하는 Json <-> Java 합성 화 (0) | 2020.12.07 |
---|---|
UITableView, cellForRowAtIndexPath 동안 어떤 섹션을 어떻게 알 수 있습니까? (0) | 2020.12.07 |
F #은 어떤 영역에서 "사용에있어 전혀 의미가 없습니까?" (0) | 2020.12.07 |
주요 getoutput () 하위 프로세스에서 해당 (0) | 2020.12.07 |
Java에서 구현 된 메서드와 함께 Scala 특성 사용 (0) | 2020.12.07 |