En toda la web, veo una gran cantidad de programadores de JavaScript escribiendo en window.locationlugar de solo location. Tenía curiosidad por saber si alguien podía ofrecer una explicación de por qué. windowes el objeto global y, por lo tanto, no es necesario incluirlo, ¿no es así? Quiero decir, no ves a la gente escribir window.Math.flooro new window.Date(), así que tengo curiosidad por saber por qué se especificaría con location.
Entiendo que locationse considera que es una "propiedad" de la ventana en la que estás, lo cual supongo que tiene algún sentido. Pero aun así, no veo ninguna razón para especificar el objeto global; no es posible sobrescribir locationen primer lugar, no sin redirigir la página.
Entonces, ¿es esto solo una peculiaridad que se ha utilizado durante tanto tiempo que se ha integrado con la forma en que escribimos JavaScript, o hay alguna razón tangible para hacer las cosas de esta manera? Revisé Google, pero, por desgracia, no encontré nada ...

windowes.En parte por seguridad en caso de que alguien defina una
locationvariable en algún lugar de la cadena de alcance. lawindow.locationhace una referencia explícita a la propiedad dewindow.Ejemplo: http://jsfiddle.net/dr6KH/
(function() { var location = 'new value'; // creating a local variable called "location" (function() { alert(location); // alerts "new value" alert(window.location); // alerts the toString value of window.location })(); })();fuente
Hay una gran diferencia entre
window.locationlos objetos nativosMathyDate, que es queMathyDateson objetos JavaScript nativos que se especifican para existir como propiedades del objeto global, mientras quewindow.locationes una propiedad delwindowobjeto host (un objeto host es un objeto que representa algún aspecto de el entorno, proporcionado por el entorno, y no está sujeto a las mismas reglas que los objetos JavaScript nativos. Otros objetos host incluyendocumenty cualquier elemento DOM).windowen los navegadores tiene dos propósitos: primero, actuar como el objeto global ECMAScript (bien especificado), y segundo, actuar como un objeto anfitrión que proporciona información sobre el entorno del navegador. Para los usos dewindowen su capacidad de objeto anfitrión, prefiero ser explícito y proporcionar elwindow.prefijo: el hecho de quelocationfuncione sin él es solo una coincidencia que proviene dewindowla naturaleza esquizofrénica. Además, como se señaló en otras respuestas, esto también tiene la ventaja de protegerlo en el caso de quelocationexista otra variable en el contexto actual.Una buena razón para no usar el prefijo
DateoMathconwindow.es que al hacerlo se crea un código que no funciona en un entorno sin navegador. Otros entornos generalmente no proporcionanwindowun alias para el objeto global.fuente
Parte de la codificación es la claridad. A diferencia de Math o Date, la ubicación es conceptualmente una propiedad de la ventana, por lo que el código se vuelve más claro para incluirla. La ventana." Lo ideal es eliminar el prefijo para la minificación.
Probablemente tenga razón en que gran parte de la razón es histórica. Javascript tiene un extenso historial de copiar y pegar.
fuente
window.location. Las únicas páginas "versus" que pude encontrar discutenwindow.locationversuslocation.href, que tampoco ayudaron.No siempre es solo una cuestión de estilo: estaba tratando de cargar botones de redes sociales de forma asincrónica después del evento de carga de la ventana agregando elementos de script a un fragmento y luego agregando ese fragmento al documento. El widgets.js de Twitter se usa
location.hrefen varios lugares y estaba causando el siguiente error en IE 8/9: Llamada inesperada al método o acceso a la propiedad . No he descubierto por qué, pero esto solo sucede cuando se visita la página a través de un enlace de otra página. Si solo agrega el elemento de script al encabezado o lo usawindow.location.href, esto no ocurre, por lo que parece ser una rareza con IE 8/9 ycreateDocumentFragment().Ejemplo:
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://www.stackoverflow.com">Tweet</a> <script> (function (d, t) { var head = document.getElementsByTagName('head')[0]; var frag = d.createDocumentFragment(); var s = d.createElement(t); s.async = true; s.src = 'http://platform.twitter.com/widgets.js'; frag.appendChild(s); head.appendChild(frag); } (document, 'script')); </script>fuente
El
windowobjeto es el espacio de nombres de trabajo predeterminado, porlocationlo que será igual awindow.location.Creo que el uso
locationes un poco ambiguo, utilícelowindow.locationpara mayor claridad.fuente
function f() { var location = "home"; /* later on */ location = "http://google.com" }llorarwindow.documentcada vez. Dudo que alguien esté haciendo eso.Es solo una cuestión de estilo.
Conceptualmente,
locationes una propiedad dewindow(la ventana está en una ubicación), a diferencia deMathoDate.fuente
location es una propiedad del objeto window, por lo que puede obtenerlo solicitando window.location. Pero si no especifica un objeto, JavaScript asume que desea el objeto de ventana. Entonces, solo solicitar la ubicación es lo mismo que solicitar la ubicación de la ventana.
fuente
En realidad, son idénticos. Técnicamente, el "
window" objeto ES lo mismo que el alcance raíz de las variables de Javascript.fuente