¿Deben ambos hacer referencia al mismo objeto?
javascript
window.location
Morgan Cheng
fuente
fuente
Respuestas:
Según el W3C, son lo mismo. En realidad, para la seguridad del navegador cruzado, debe usar en
window.location
lugar dedocument.location
.Ver: http://www.w3.org/TR/html/browsers.html#dom-location
fuente
window.location
) sin proporcionar ninguna justificación para ello. Si no proporciona la justificación, ¿por qué alguien debería seguir su consejo? La respuesta de Christoph es mucho más útil a este respecto.La forma canónica de obtener el objeto de ubicación actual es
window.location
(consulte esta página de MSDN de 1996 y el borrador del W3C de 2006 ).Compare esto con
document.location
, que originalmente solo devolvió la URL actual como una cadena (consulte esta página en MSDN ). Probablemente para evitar confusiones,document.location
se reemplazó condocument.URL
(ver aquí en MSDN ), que también forma parte del DOM Nivel 1 .Por lo que yo sé, todos los navegadores modernos mapa
document.location
awindow.location
, pero todavía prefierenwindow.location
ya que es lo que he usado desde que escribí mi primer DHTML.fuente
window.location
, ¿no es igualmente válido usarlolocation
?window
objeto. Por lo tanto, cualquier variable o función que defina en el nivel superior de su script es una propiedad del objeto al que hace referenciawindow
, que resulta ser el objeto global. El objeto global está implícito cuando está ausentewindow.
, por lo quelocation
se interpreta que eswindow.location
. Advertencias: feif(an_undefined_variable)
arrojará un error si la variable no se definióif(window.an_undefined_variable)
, no lo hará.window.location es de lectura / escritura en todos los navegadores compatibles.
document.location es de solo lectura en Internet Explorer (al menos), pero de lectura / escritura en navegadores basados en Gecko (Firefox, SeaMonkey).
fuente
document.location
de solo lectura en IE. Puedo asignarlo con éxito en IE 10, 9, 8 y 6 (usando máquinas virtuales de modern.ie ).console.log(location);
?document.location
originalmente era una propiedad de solo lectura, aunque los navegadores Gecko también le permiten asignarle. Para la seguridad del navegador cruzado, usewindow.location
en su lugar.Lee mas:
document.location
window.location
fuente
Curiosamente, si tiene un marco, imagen o formulario llamado 'ubicación', entonces 'document.location' proporciona una referencia a la ventana, imagen o formulario del marco, respectivamente, en lugar del objeto Ubicación. Aparentemente, esto se debe a que la búsqueda de nombre de colección document.forms, document.images y window.frames tiene prioridad sobre la asignación a window.location.
fuente
window.location
, ydocument.location
no puede ser ensombrecida en Chrome o Firefox.Que yo sepa, ambos son lo mismo. Para la seguridad del navegador cruzado puede usar en
window.location
lugar dedocument.location
.Todos los navegadores modernos mapa
document.location
awindow.location
, pero todavía prefierenwindow.location
ya que es lo que he usado desde que escribí mi primera página web. Es más consistente.También puede ver
document.location === window.location
devolucionestrue
, lo que aclara que ambos son iguales.fuente
document.location === window.location
devolucionestrue
además
document.location.constructor === window.location.constructor
estrue
Nota: Acabo de probar en Firefox 3.6, Opera 10 e IE6
fuente
===
y==
son equivalentes."abc" == new String("abc")
regresatrue
mientras"abc" === new String("abc")
regresafalse
.==
y===
son equivalentes. Consulte las secciones de especificaciones 11.9.3 y 11.9.6. Para valores no nulos, no indefinidos, no numéricos, no booleanos, sin cadenas con el mismo tipo, el==
comportamiento se rige por 11.9.3 parte 1f, y el===
comportamiento por 11.9.6 parte 7, que lee idénticamente Retornotrue
si x e y se refieren al mismo objeto. De lo contrario, regresefalse
.document.location
ywindow.location
están apuntando a los objetos. Te estás perdiendo todo el punto de triples iguales; usar 2 iguales no prueba que sean el mismo obj. Deberíamos usar 3 iguales y no 2 iguales porque 2 iguales nos darán un falso positivo. En un navegador donde document.location es una cadena URL igual awindow.location.toString()
, entoncesdocument.location==window.location
devolverá verdadero mientrasdocument.location===window.location
que devolverá falso.document.location === window.location
comparación. El hecho de que la.constructor
comparación también se incluya significa, creo, que esta respuesta sigue siendo sólida, pero el uso===
simplificaría el razonamiento.Sí, son lo mismo. Es una de las muchas peculiaridades históricas en la API JS del navegador. Trata de hacerlo:
fuente
window.location es el más confiablemente consistente de los dos, considerando los navegadores más antiguos.
fuente
Es raro ver la diferencia hoy en día porque html 5 ya no admite conjuntos de marcos. Pero en el momento en que tenemos el conjunto de marcos, document.location redirigiría solo el marco en el que se ejecuta el código, y window.location redirigiría toda la página.
fuente
Yo diría que
window.location
es la forma más confiable de obtener la URL actual . A continuación se muestra la diferencia entre elwindow.location
y eldocument.url
que apareció al frente en uno de los escenarios en los que agregué parámetros hash en la URL y los leí más tarde.Después de agregar parámetros hash en la URL.
En un navegador antiguo, no pude obtener los parámetros hash de la URL mediante el uso
document.url
, pero cuando lowindow.location
hice pude obtener los parámetros hash de la URL.Por lo tanto, siempre es mejor usar
window.location
.fuente
document.URL
: se trataba dewindow.location
ydocument.location
. Además,document.url
no existe = debe estar en mayúscula.document.location.constructor === window.location.constructor
estrue
.Es porque es exactamente el mismo objeto que puedes ver
document.location===window.location
.Por lo tanto, no es necesario comparar el constructor ni ninguna otra propiedad.
fuente
Al menos en IE, tiene una pequeña diferencia en el archivo local:
document.URL devolverá "file: // C: \ projects \ abc \ a.html"
pero window.location.href devolverá "file: /// C: /projects/abc/a.html"
Una es la barra diagonal inversa, la otra es barra diagonal.
fuente
Bueno, sí, son lo mismo, pero ...!
window.location
no funciona en algunos navegadores de Internet Explorer.fuente
A pesar de que la mayoría de las personas lo recomiendan aquí, así es como se veía el protocolo dinámico de Google Analytics recortado durante siglos (antes de que se mudaran de ga.js a analytics.js recientemente):
Más información: https://developers.google.com/analytics/devguides/collection/gajs/
En la nueva versión usaron '//' para que el navegador pueda agregar automáticamente el protocolo:
Entonces, si Google prefiere document.location a
window.location
cuando necesitan protocolo en JS, supongo que tienen algunas razones para eso.GENERAL : personalmente creo eso
document.location
ywindow.location
son lo mismo, pero si es gigante con mayores estadísticas sobre el uso de navegadores como Google usando document.location , recomiendo seguirlos.fuente
En realidad, noto una diferencia en el cromo entre ambos. Por ejemplo, si desea navegar a un marco de espacio aislado desde un marco secundario, puede hacerlo solo con document.location pero no con window.location
fuente