diferença entre "void 0" e "undefined"
estou a usar"Compilador de fechamento", ao compilar meus scripts, gasto o seguinte:
Antes de compilar:
// ==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({});
Compilado:
// 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({});
Com isso, acredito que a questão do uso de "void 0" e "undefined", existe alguma diferença no uso ou os dois casos estão bem?
Editar
se eu definir "var undefined" compilado com "void 0", se eu não definir "undefined" compilado com "undedined", então não será uma questão de número de caracteres entre "undefined" e "void 0"
Edit II: performance, baseado emesse link
IE 8:
typeof: 228ms
undefined: 62ms
vazio 0: 57ms
Firefox 3.6:
typeof: 10ms
indefinido: 3ms
nulo 0: 3ms
Opera 11:
typeof: 67ms
undefined: 19ms
0: 20ms
Chrome 8:
typeof: 3ms
indefinido: 5ms
nulo 0: 3ms