2011-04-20 11 views
5

Algunos payasada javascript:undefined = true; luego de vuelta a indefinido?

Si esto funciona

undefined = true; 

entonces ¿cómo se puede volver a configurar de nuevo a undefinedundefined que representa?


Sin duda, el camino más fácil es almacenar undefined en otra variable antes de undefined a true. ¿De qué otra manera puedes restaurar undefined?

Primero pensé en volver a configurarlo delete undefined;, no funcionó.

Respuesta

8

Alex's answer es el seguro y práctico forma de asegurar undefined es realmente indefinido.

Pero JS es super flexible, de modo por diversión, si desea revertir la mundialundefined, a continuación, puede reasignar window.undefined desde la seguridad de un nuevo ámbito de la función:

(function() {   // Create a new scope 
    var a;     // "a" is undefined in this scope 
    window.undefined = a; // Set the global "undefined" to "a" 
})()      // Execute immediately 

Tomando esta idea más adelante, puede reconfigurar lo anterior para convertirse en:

undefined = (function() { 
    var a;     // "a" is undefined 
    return a;    // return "a" 
})(); 

O en realidad, sólo esto:

undefined = (function() { 
    return; 
})(); 

Pero, de hecho, que en realidad no necesita devolver nada:


Por supuesto, luego está también el void operator ;-) doh!

undefined = void 0; 
+0

+1 por ser divertido :) – alex

+0

Maldita sea, acaba de llegar aquí para editar 'void' en mi respuesta, y se me adelantó: P jaja – alex

+0

@alex sí, me olvidé por completo de que antes también . –

7
(function(undefined) { 

    // undefined is undefined again! 

})(); 

jQuery utiliza este patrón.

delete es el mejor operador para eliminar propiedades de objetos. Hay varias cosas en las que no funcionará, y usarlo con Array simplemente establece el elemento en undefined (más o menos, no se enumerará con in). Es mejor usar splice() con un Array.

Cuestiones relacionadas