¿Por qué la propiedad "location" termina en Object.keys () después de include jQuery en la página?

Tengo este código:

<script> console.log( Object.keys( this ) ); </script> <script src="http://code.jquery.com/jquery-1.9.1.min.js"></script> <script> console.log( Object.keys( this ) ); </script> 

En Firefox, la console registra esto:

 [ "window", "document", "InstallTrigger", "console", "getInterface" ] [ "window", "document", "InstallTrigger", "console", "getInterface", "location", "$", "jQuery" ] 

Demostración en vivo: http://jsfiddle.net/eX8jQ/

Observe cómo Object.keys(this) devuelve tres elementos adicionales después de que se ejecuta jQuery. Entiendo por qué se agregan "$" y "jQuery" , pero ¿por qué "location" ?

También probé en Chrome e IE10. En ambos, solo se agregan "$" y "jQuery" .

jQuery 1.9.1 contiene lo siguiente en su código de initialization interno:

 var location = window.location; 

En el context de nivel superior, this es la window , por lo que está probando Object.keys(window) . Aparentemente, Firefox trata mágicamente la propiedad window.location : no aparece en las keys less que se acceda. Entonces, un efecto secundario de la asignación anterior es hacer que aparezca allí.

Esta variable local no está en jQuery 1.11.1 o jQuery 2.1.1, por lo que simplemente cargar jQuery no debería tener este efecto secundario.

En Firefox, la location no está en las teclas por defecto, sin embargo, en Chrome y IE está allí para comenzar. Pruebe esto en Chrome e IE10: http://jsfiddle.net/eX8jQ/1/ Y también en su violín, puede ver la location en Chrome y es decir, simplemente no está en la misma location en la matriz.

y porque debo include código para publicar esto …

 <script> console.log( Object.keys( this ) ); </script> 

En realidad, no he probado esto en IE10, no tengo acceso a él en este momento.