Sollten beide auf dasselbe Objekt verweisen?
javascript
window.location
Morgan Cheng
quelle
quelle
Antworten:
Laut W3C sind sie gleich. In Wirklichkeit sollten Sie aus Gründen der browserübergreifenden Sicherheit
window.location
eher als verwendendocument.location
.Siehe: http://www.w3.org/TR/html/browsers.html#dom-location
quelle
window.location
) ohne Begründung. Wenn Sie die Begründung nicht liefern, warum sollte jemand Ihren Rat befolgen? Christophs Antwort ist in dieser Hinsicht weitaus nützlicher.Der kanonische Weg, um das aktuelle Standortobjekt abzurufen, ist
window.location
(siehe diese MSDN-Seite von 1996 und den W3C-Entwurf von 2006 ).Vergleichen Sie dies mit
document.location
, das ursprünglich nur die aktuelle URL als Zeichenfolge zurückgegeben hat (siehe diese Seite auf MSDN ). Wahrscheinlich, um Verwirrung zu vermeiden,document.location
wurde durchdocument.URL
(siehe hier auf MSDN ) ersetzt, das ebenfalls Teil von DOM Level 1 ist .Soweit ich weiß, Karte alle modernen Browser
document.location
zuwindow.location
, aber ich immer noch lieberwindow.location
als das ist , was ich verwendet habe , seit ich meinen ersten DHTML geschrieben.quelle
window.location
, ist es nicht gleichermaßen gültig, nur zu verwendenlocation
?window
Objekt. Daher ist jede Variable oder Funktion, die Sie auf der obersten Ebene Ihres Skripts definieren, eine Eigenschaft des Objekts, auf das verwiesen wirdwindow
, das zufällig das globale Objekt ist. Globales Objekt wird impliziert, wenn es abwesend istwindow.
- alsolocation
als interpretiertwindow.location
. Vorsichtsmaßnahmen - zBif(an_undefined_variable)
wird ein Fehler ausgegeben , wenn die Variable nicht definiert wurde -if(window.an_undefined_variable)
nicht.window.location wird in allen kompatiblen Browsern gelesen / geschrieben.
document.location ist (zumindest) in Internet Explorer schreibgeschützt, in Gecko-basierten Browsern (Firefox, SeaMonkey) jedoch schreibgeschützt.
quelle
document.location
die im IE schreibgeschützt ist, nicht reproduzieren . Ich kann es erfolgreich in IE 10, 9, 8 und 6 zuweisen (mit VMs von modern.ie ).console.log(location);
? !!document.location
war ursprünglich eine schreibgeschützte Eigenschaft, obwohl Sie sie auch in Gecko-Browsern zuweisen können. Verwenden Siewindow.location
stattdessen für die browserübergreifende Sicherheit .Weiterlesen:
document.location
window.location
quelle
Interessanterweise enthält 'document.location', wenn Sie einen Rahmen, ein Bild oder ein Formular mit dem Namen 'location' haben, anstelle des Location-Objekts einen Verweis auf das Rahmenfenster, das Bild bzw. das Formular. Dies liegt anscheinend daran, dass die Suche nach den Auflistungsnamen document.forms, document.images und window.frames Vorrang vor der Zuordnung zu window.location hat.
quelle
window.location
unddocument.location
kann nicht in Chrome oder Firefox beschattet werden.Soweit ich weiß, sind beide gleich. Für die browserübergreifende Sicherheit können Sie
window.location
eher als verwendendocument.location
.Alle modernen Browser Karte
document.location
zuwindow.location
, aber ich immer noch lieberwindow.location
als das ist , was ich verwendet habe , seit ich meine erste Web - Seite geschrieben. es ist konsequenter.Sie können auch
document.location === window.location
Rückgaben sehentrue
, die verdeutlichen, dass beide gleich sind.quelle
document.location === window.location
kehrt zurücktrue
ebenfalls
document.location.constructor === window.location.constructor
isttrue
Hinweis: Gerade getestet auf Firefox 3.6, Opera 10 und IE6
quelle
===
und==
sind gleichwertig."abc" == new String("abc")
Rückkehrtrue
während"abc" === new String("abc")
Rückkehrfalse
.==
und===
gleichwertig sind. Siehe die Spezifikationsabschnitte 11.9.3 und 11.9.6. Für Nicht-Null-, Nicht-Undefinierte, Nicht-==
Zahlen- , Nicht-Bool-, Nicht-String-Werte mit demselben Typ wird das Verhalten von 11.9.3 Teil 1f und das===
Verhalten von 11.9.6 Teil 7 bestimmt, die identisch Returntrue
iffalse
document.location
undwindow.location
auf Objekte zeigen. Sie vermissen den ganzen Punkt von Triple Equals; Die Verwendung von 2 gleich beweist nicht, dass sie dasselbe Objekt sind. Wir sollten 3 gleiche und nicht 2 gleiche verwenden, da 2 gleiche uns ein falsches Positiv geben. In einem Browser, in dem document.location eine URL-Zeichenfolge ist, die gleich true istwindow.location.toString()
,document.location==window.location
wird true zurückgegeben, währenddocument.location===window.location
false zurückgegeben wird.document.location === window.location
Vergleich betrifft. Die Tatsache, dass der.constructor
Vergleich ebenfalls eingeworfen wird, bedeutet meiner Meinung nach, dass diese Antwort immer noch richtig ist, aber die Verwendung===
würde die Argumentation vereinfachen.Ja, sie sind gleich. Dies ist eine der vielen historischen Macken in der JS-API des Browsers. Versuchen Sie Folgendes:
quelle
window.location ist unter Berücksichtigung älterer Browser die zuverlässigere konsistente der beiden.
quelle
Es ist heutzutage selten, den Unterschied zu sehen, da HTML 5 keine Framesets mehr unterstützt. Zu der Zeit, als wir ein Frameset hatten, leitete document.location nur den Frame um, in dem Code ausgeführt wird, und window.location leitete die gesamte Seite um.
quelle
Ich würde sagen,
window.location
ist der zuverlässigere Weg, um die aktuelle URL zu erhalten . Das Folgende ist der Unterschied zwischen demwindow.location
und demdocument.url
, der in einem der Szenarien, in denen ich Hash-Parameter in die URL angehängt und später gelesen habe, vorgekommen ist.Nach dem Hinzufügen von Hash-Parametern in der URL.
In einem älteren Browser konnte ich die Hash-Parameter nicht mithilfe von aus der URL abrufen
document.url
, aber als ich sie verwendete,window.location
konnte ich die Hash-Parameter über die URL abrufen.Es ist also immer besser zu benutzen
window.location
.quelle
document.URL
- es ging umwindow.location
unddocument.location
. Existiertdocument.url
auch nicht = es sollte in Großbuchstaben geschrieben werden.document.location.constructor === window.location.constructor
isttrue
.Es ist, weil es genau das gleiche Objekt ist, von dem Sie sehen können
document.location===window.location
.Es ist also nicht erforderlich, den Konstruktor oder eine andere Eigenschaft zu vergleichen.
quelle
Zumindest im IE gibt es einen kleinen Unterschied zur lokalen Datei:
document.URL gibt "file: // C: \ projects \ abc \ a.html" zurück.
window.location.href gibt jedoch "file: /// C: /projects/abc/a.html" zurück.
Einer ist ein Schrägstrich, einer ist ein Schrägstrich.
quelle
Nun ja, sie sind die gleichen, aber ...!
window.location
funktioniert in einigen Internet Explorer-Browsern nicht.quelle
Obwohl die meisten Leute hier empfehlen, sah das dynamische Protokoll von Google Analytics so lange aus (bevor sie kürzlich von ga.js zu analyse.js wechselten):
Weitere Informationen: https://developers.google.com/analytics/devguides/collection/gajs/
In der neuen Version wurde '//' verwendet, damit der Browser automatisch das Protokoll hinzufügen kann:
Wenn Google document.location dem
window.location
Protokoll in JS vorzieht , haben sie vermutlich einige Gründe dafür.GESAMT : Ich persönlich glaube das
document.location
und binwindow.location
das gleiche, aber wenn Riese mit den größten Statistiken über die Verwendung von Browsern wie Google mit document.location , empfehle ich, ihnen zu folgen.quelle
Tatsächlich bemerke ich einen Unterschied in Chrome zwischen beiden. Wenn Sie beispielsweise von einem untergeordneten Frame aus zu einem Sandbox-Frame navigieren möchten, können Sie dies nur mit document.location, nicht jedoch mit window.location tun
quelle