diferencia entre "vacío 0" y "indefinido"
Estoy usando"Compilador de cierre", al compilar mis scripts, paso lo siguiente:
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({});
Con esto creo que la cuestión del uso de "vacío 0" y "indefinido", ¿hay alguna diferencia en el uso o los dos casos están bien ?.
Editar
si defino "var undefined" compilado con "void 0", si no definí "undefined" compilado con "undedined", entonces no es una cuestión de número de caracteres entre "undefined" y "void 0"
Edit II: rendimiento, basado eneste enlace
IE 8:
typeof: 228ms
indefinido: 62ms
nulo 0: 57ms
Firefox 3.6:
typeof: 10ms
indefinido: 3 ms
nulo 0: 3 ms
Opera 11:
typeof: 67ms
indefinido: 19ms
nulo 0: 20ms
Chrome 8:
typeof: 3ms
indefinido: 5 ms
nulo 0: 3 ms