Gibt es einen Unterschied zwischen diesen beiden Zeilen?
var url = "http://www.google.com/";
window.location = url;
window.location.replace(url);
javascript
window
location
Aaron Digulla
quelle
quelle
href
undassign
: stackoverflow.com/q/2383401/632951 , stackoverflow.com/q/7703689/632951 , stackoverflow.com/q/10302905/632951Antworten:
window.location
Fügt Ihrem Verlauf ein Element hinzu, indem Sie auf "Zurück" klicken können (oder sollten) und zur aktuellen Seite zurückkehren können.window.location.replace
Ersetzt das aktuelle Verlaufselement, sodass Sie nicht mehr darauf zurückgreifen können.Siehe
window.location
:Oh und allgemein gesagt:
wird bevorzugt gegenüber:
quelle
window.location.href
man es vorziehenwindow.location
?window.location.replace(URL)
wo die URL genau mit der aktuellen übereinstimmt, kann ich damit rechnen, dass sie aktualisiert / neu geladen wird, oder kann sie nichts tun?TLDR;
verwenden
location.href
oder besser verwendenwindow.location.href
;Wenn Sie dies jedoch lesen, erhalten Sie unbestreitbare Beweise.
Die Wahrheit ist, dass es in Ordnung ist, aber warum Dinge tun, die fragwürdig sind. Sie sollten die höhere Straße nehmen und es einfach so machen, wie es wahrscheinlich sein sollte.
Dieser Code ist in Bezug auf Syntax, Logik und Typ vollkommen korrekt. Wissen Sie, dass das einzige, was daran falsch ist?
es hat
location
stattlocation.href
was ist damit?
Was ist der Wert von
mystring
? Weiß jemand wirklich, ohne einen Test zu machen? Niemand weiß, was genau hier passieren wird. Zur Hölle, ich habe das gerade geschrieben und weiß nicht einmal, was es tut.location
ist ein Objekt, aber ich weise eine Zeichenfolge zu. Wird es die Zeichenfolge oder das Standortobjekt übergeben? Nehmen wir an, es gibt eine Antwort darauf, wie dies umgesetzt werden sollte. Können Sie garantieren, dass alle Browser dasselbe tun?Dies kann ich so ziemlich erraten, dass alle Browser das gleiche behandeln.
Was ist, wenn Sie dies in Typoskript einfügen, wird es kaputt gehen, weil der Typ-Compiler sagt, dass dies ein Objekt sein soll?
Dieses Gespräch ist jedoch so viel tiefer als nur das
location
Objekt. Worum geht es bei dieser Konvertierung, was für ein Programmierer Sie sein möchten?Wenn Sie diese Abkürzung nehmen, könnte es heute in Ordnung sein, morgen könnte es in Ordnung sein, verdammt, es könnte für immer in Ordnung sein, aber Sie, Sir, sind jetzt ein schlechter Programmierer. Es wird nicht in Ordnung für dich sein und es wird dich im Stich lassen.
Es wird mehr Objekte geben. Es wird eine neue Syntax geben.
Sie könnten einen Getter definieren, der nur eine Zeichenfolge akzeptiert, aber ein Objekt zurückgibt, und das Schlimmste ist, dass Sie denken, dass Sie etwas richtig machen. Sie könnten denken, dass Sie für diese clevere Methode brillant sind, weil die Leute hier Sie schändlich in die Irre geführt haben.
Mit Getter und Setter würde dieser Code tatsächlich funktionieren, aber nur weil er gemacht werden kann, heißt das nicht, dass es 'WISE' ist, dies zu tun.
Die meisten Leute, die programmieren, lieben es zu programmieren und besser zu werden. In den letzten Jahren bin ich ziemlich gut geworden und habe viel gelernt. Das Wichtigste, was ich jetzt weiß, besonders wenn Sie Bibliotheken schreiben, ist Konsistenz und Vorhersehbarkeit.
Tun Sie die Dinge, die Sie konsequent tun können.
+"2"
<- Dies hier analysiert die Zeichenfolge zu einer Zahl. solltest du es benutzen oder solltest du verwendenparseInt("2")
?was ist mit
var num =+"2"
?Von dem, was du gelernt hast, von den Köpfen des Stackoverflow bin ich nicht zu hoffnungsvoll.
Wenn Sie anfangen, diesen 2 Wörtern konsistent und vorhersehbar zu folgen. Sie kennen die richtige Antwort auf eine Vielzahl von Fragen zum Stackoverflow.
Lassen Sie mich Ihnen zeigen, wie sich das auszahlt. Normalerweise setze ich
;
in jede Zeile Javascript, die ich schreibe. Ich weiß, dass es ausdrucksvoller ist. Ich weiß, dass es klarer ist. Ich habe meine Regeln befolgt. Eines Tages entschied ich mich dagegen. Warum? Weil mir so viele Leute sagen, dass es nicht mehr benötigt wird und JavaScript darauf verzichten kann. Also, was ich beschlossen habe, dies zu tun. Jetzt, da ich mir als Programmierer sicher bin (da Sie die Früchte des Erlernens einer Sprache genießen sollten), habe ich etwas sehr Einfaches geschrieben und es nicht überprüft. Ich habe ein Komma gelöscht und dachte nicht, dass ich es erneut testen müsste, um ein so einfaches Komma zu entfernen.Ich habe etwas Ähnliches in es6 und babel geschrieben
Dieser Code schlägt fehl und es hat ewig gedauert, ihn herauszufinden. Aus irgendeinem Grund sah es was
Tief im Quellcode versteckt sagte es mir, dass "Hallo Welt" keine Funktion ist.
Für mehr Spaß zeigt Node nicht die Quellkarten des transpilierten Codes.
Verschwendete so viel dumme Zeit. Ich habe auch jemandem vorgestellt, wie brillant ES6 ist, und dann musste ich mit dem Debuggen beginnen und zeigen, wie kopfschmerzfrei und besser ES6 ist. Nicht überzeugend ist es.
Ich hoffe das hat deine Frage beantwortet. Da dies eine alte Frage ist, ist es mehr für die zukünftige Generation, Menschen, die noch lernen.
Frage, wenn Leute sagen, dass es egal ist, wie es funktioniert. Die Chancen stehen gut, dass eine klügere, erfahrenere Person Ihnen etwas anderes sagt.
Was ist, wenn jemand das Standortobjekt überschreibt? Sie werden einen Shim für ältere Browser machen. Es wird eine neue Funktion erhalten, die angepasst werden muss, und Ihr 3 Jahre alter Code schlägt fehl.
Meine letzte Notiz zum Nachdenken.
Das Schreiben von sauberem, klarem und zielgerichtetem Code bewirkt etwas für Ihren Code, das nicht mit richtig oder falsch beantwortet werden kann. Es macht Ihren Code zu einem Enabler.
Sie können mehr Dinge Plugins, Bibliotheken ohne Angst vor Unterbrechungen zwischen den Codes verwenden.
für die Aufzeichnung. verwenden
window.location.href
quelle
window.location.href
over argumentiertenwindow.location
, vergaßen Sie, dass die Frage tatsächlich nach dem Unterschied zwischen diesen undwindow.location.replace()
TLDR; use location.href or better use window.location.href;
Der TLDR ist diese Zeile. Der Rest ist die "Antwort".mystring = location.href = "#/some/spa/route"
. Außerdem würden viele Sprachen (implizite) Typumwandlungen in irgendeiner Weise zulassen. Am Ende des Tages ist Javascript eine dynamische typisierte Sprache, setzen Sie Typkonzepte darauf und sagen Sie, dass es nicht gut ist, macht keinen Sinn.console
oder schattiertwindow
- Jetzt haben Sie ein größeres Problem.