2010-04-16 9 views

Respuesta

51

document.location es un sinónimo de window.location que ha estado en desuso durante casi el tiempo que JavaScript ha existido. No lo uses

location es un objeto estructurado, con propiedades que corresponden a las partes de la URL. location.href es la URL completa en una sola cadena. La asignación de una cadena a cualquiera de ellos se define para causar el mismo tipo de navegación, así que elija su elección.

(I que no escribe a location.href= something ser un poco mejor, ya que es un poco más explícito acerca de lo que está haciendo. Te lo general quiere evitar simplemente location= something como parece engañosamente como una asignación de variables. window.location= something está bien sin embargo.)

+1

¿Lo hace 'document.location' o' window.location' que está en desuso? – enguerran

+4

'document.location'. Ya no está en desuso en HTML5 ahora, por lo que vale. – bobince

+0

Entonces ... en HTML5, nada está en desuso. Y 'document.location' es lo mismo que' window.location' es lo mismo que 'location', ¿no es así? – enguerran

3

document.location está en desuso en favor de window.location, que se puede acceder solo por ubicación, ya que es un objeto global.

El objeto de ubicación tiene varias propiedades y métodos. Si intenta usarlo como una cadena, entonces actúa como location.href.

3

document.location es un objeto, mientras que document.location.href es una cadena. Pero el primero tiene un método toString, por lo que puede leerlo como si fuera una cadena y obtener el mismo valor que document.location.href.

En algunos navegadores, la mayoría de los modernos, creo, también se puede asignar a document.location como si fuera una cadena. De acuerdo con el Mozilla documentation, sin embargo, es mejor utilizar window.location para este fin, ya que document.location era originalmente de solo lectura y, por lo tanto, es posible que no sea tan ampliamente compatible.

20

El document.location es un objeto que contiene propiedades para la ubicación actual.

La propiedad href es una de estas propiedades, que contiene la URL completa, es decir, todas las demás propiedades juntas.

Algunos navegadores le permiten asignar una URL al objeto location y actúa como si lo hubiera asignado a la propiedad href. Algunos otros navegadores son más exigentes y requieren que uses la propiedad href. Por lo tanto, para que el código funcione en todos los navegadores, debe usar la propiedad href.

Ambos objetos window y document tienen un objeto location. Puede configurar la URL usando window.location.href o document.location.href. Sin embargo, lógicamente el objeto document.location debe ser de solo lectura (ya que no puede cambiar la URL de un documento; cambiar la URL carga un documento nuevo), por lo que debe tener en cuenta que debe usar window.location.href cuando desee establecer la URL

+0

muy buena explicación, gracias. – Michel

9
typeof document.location; // 'object' 
typeof document.location.href; // 'string' 

La propiedad href es una cadena, mientras que document.location sí es un objeto.

+0

La notación de puntos solo aclara esto –

3

A partir de de junio de 14to 2013 (HTML5), hay una diferencia significativa

Browser : Chrome 27.X.X

Referencias: document.location, window.location (MDN)


document.loca ción

type: Object

El objeto cuando se le llama por sí mismo document.location devolver sus propiedades origin + pathname concatenada.

Para recuperar solo la URL como una cadena, se puede usar la propiedad de solo lectura document.URL.

ancestorOrigins: DOMStringList 
assign: function() { [native code] } 
hash: "" 
host: "stackoverflow.com" 
hostname: "stackoverflow.com" 
href: "http://stackoverflow.com/questions/2652816/what-is-the-difference-between-document-location-href-and-document-location?rq=1" 
origin: "http://stackoverflow.com" 
pathname: "https://stackoverflow.com/questions/2652816/what-is-the-difference-between-document-location-href-and-document-location" 
port: "" 
protocol: "http:" 
reload: function() { [native code] } 
replace: function() { [native code] } 
search: "?rq=1" 
toString: function toString() { [native code] } 
valueOf: function valueOf() { [native code] } 

document.location.href

type: string

http://stackoverflow.com/questions/2652816/what-is-the-difference-between-document-location-href-and-document-location?rq=1 
0

Aquí está un ejemplo de la importancia práctica de la diferencia y cómo le puede morder si no se dan cuenta it (document.location siendo un objeto y document.location.href siendo una cadena):

Utilizamos la versión gratuita de MonoX Social CMS (http://mono-software.com) al http://social.ClipFlair.net y queríamos agregar la barra de idioma de WebPart en algunas páginas para localizarlas, pero en algunas otras (p. Ej. en las discusiones) no queríamos usar la localización. Así que hicimos dos páginas maestras para usar en todas nuestras páginas .aspx (ASP.net), en la primera teníamos la barra de idiomas WebPart y la otra tenía la siguiente secuencia de comandos para eliminar el/lng/el-GR etc. de las direcciones URL y mostrar el valor por defecto (Inglés en nuestro caso) el lenguaje en lugar de esas páginas

<script> 
    var curAddr = document.location; //MISTAKE 
    var newAddr = curAddr.replace(new RegExp("/lng/[a-z]{2}-[A-Z]{2}", "gi"), ""); 
    if (curAddr != newAddr) 
    document.location = newAddr; 
</script> 

Pero este código no funciona, reemplace la función sólo devuelve Indefinido (no es una excepción lanzada) por lo que intenta navegar decir x/lng/el-GR/undefined en lugar de ir a url x. Comprobándolo con el depurador de Mozilla Firefox (tecla F12) y moviendo el cursor sobre la variable curAddr estaba mostrando mucha información en lugar de un valor de cadena simple para la URL. Al seleccionar Ver desde esa ventana emergente, se podía ver en el panel del reloj que estaba escribiendo "Ubicación -> ..." en lugar de "..." para la url. Eso me hizo darme cuenta de que era un objeto

Hubiera esperado reemplazar para arrojar una excepción o algo así, pero ahora que lo pienso, el problema fue que estaba tratando de llamar a un método inexistente de "reemplazo" en el Objeto URL que parece devolver "indefinido" en Javascript.

El código correcto en este caso es:

<script> 
    var curAddr = document.location.href; //CORRECT 
    var newAddr = curAddr.replace(new RegExp("/lng/[a-z]{2}-[A-Z]{2}", "gi"), ""); 
    if (curAddr != newAddr) 
    document.location = newAddr; 
</script> 
Cuestiones relacionadas