Hay dos razones para ello:
1) Si undefined
es una variable en el ámbito de la función en lugar de una propiedad de objeto global, minifiers puede reducir a una sola letra logrando así una mejor tasa de compresión.
2) Antes de ES5 *, undefined
era una propiedad del objeto global sin protección contra escritura. Por lo tanto, podría sobrescribirse, dando como resultado un comportamiento extraño e inesperado. Se podría hacer algo como esto:
var test = 123;
undefined = 123;
if (test === undefined){
// this will actually be true, since undefined now equals 123
}
Al tener un argumento de la función undefined
(el nombre en realidad no importa), que no pasa un parámetro a, usted podría asegurarse de que tiene una variable que realmente es undefined
para que pueda probar "indefinición" en contra de esta variable.
BTW.el método más seguro para la prueba de indefinido es: typeof (var) === 'undefined'
(*) Con EcmaScript 5, las propiedades globales undefined
, NaN
y Infinity
se convirtió en sólo lectura. Por lo tanto, con su adopción general en todos los navegadores modernos, por supuesto, con la excepción de IE 9, ya no era posible sobrescribir esos valores.
La razón por la que jQuery usa este método en lugar de 'typeof' es que se comprime mucho mejor en un minificador de JavaScript. – interjay
Eso es cierto, sin embargo typeof es el método más seguro. También podría usar la naturaleza falsa de indefinido, que sería la comprobación más corta para "indefinido", pero está ensombrecida por la existencia de otros valores falsy. – Christoph