Jaka jest różnica między oknem.location = and window.miejsce.replace()?

Czy jest różnica między tymi dwoma liniami?

var url = "http://www.google.com/";
window.location = url;
window.location.replace(url);
Author: Seth McClaine, 2009-12-08

2 answers

window.location dodaje element do historii, dzięki czemu możesz (lub powinieneś) kliknąć "Wstecz" i wrócić do bieżącej strony.

window.location.replace zastępuje bieżącą historię, więc nie można do niej wrócić.

Zobacz window.location:

assign(url): załaduj dokument na podany adres URL.

replace(url):Zastąp prąd dokument z tym w podanym URL. Różnica w stosunku do assign() metoda polega na tym, że po użyciu replace() bieżąca strona nie będzie be zapisane w historii sesji, czyli użytkownik nie będzie mógł korzystać z tyłu przycisk, aby przejść do niego.

Oh I ogólnie mówiąc:

window.location.href = url;

Jest uprzywilejowane:

window.location = url;
 424
Author: cletus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-29 05:22:48

TLDR;

Użyj location.href lub lepiej Użyj window.location.href;

Jednak jeśli to przeczytasz, zyskasz niezaprzeczalny dowód.

Prawda jest taka, że można go używać, ale po co robić rzeczy, które są wątpliwe. Powinieneś wybrać wyższą drogę i po prostu zrobić to tak, jak prawdopodobnie powinno być zrobione.
location = "#/mypath/otherside"
var sections = location.split('/')

Ten kod jest doskonale poprawny pod względem składni, logiki, typu wiesz, co w tym złego?

Ma location zamiast location.href

Co z tym

var mystring = location = "#/some/spa/route"

Jaka jest wartość mystring? czy ktoś naprawdę wie, nie robiąc jakiegoś testu. Nikt nie wie, co dokładnie się tu wydarzy. Cholera, właśnie to napisałem i nawet nie wiem, co to robi. location jest obiektem, ale przypisuję ciąg znaków, czy przekaże ciąg znaków, czy przekaże obiekt lokalizacji. Powiedzmy, że istnieje jakaś odpowiedź na to, jak to powinno być realizowane. Czy możesz zagwarantować, że wszystkie przeglądarki zrobią to samo?

To mogę się domyślać, że wszystkie przeglądarki poradzą sobie z to samo.

var mystring = location.href = "#/some/spa/route"

A jeśli umieścisz to w typescripcie, to się zepsuje, ponieważ kompilator typów powie, że to jest obiekt?

Ta rozmowa jest jednak o wiele głębsza niż tylko location obiekt. Co to za konwersja o jakim programistą chcesz być?

Jeśli weźmiesz ten skrót, to może być dobrze dzisiaj, może być dobrze jutro, do diabła może być dobrze na zawsze, ale teraz jesteś złym programistą. Nie będzie dobrze dla ty i to cię zawiedzie.

Będzie więcej obiektów. Będzie nowa składnia.

Możesz zdefiniować getter, który pobiera tylko ciąg znaków, ale zwraca obiekt, a najgorsze jest to, że pomyślisz, że robisz coś poprawnego, możesz pomyśleć, że jesteś genialny w tej sprytnej metodzie, ponieważ ludzie tutaj haniebnie doprowadzili Cię na manowce.

var Person.name = {first:"John":last:"Doe"}
console.log(Person.name) // "John Doe"

Z getterami i setterami ten kod faktycznie by działał, ale to, że można to zrobić, nie znaczy, że jest to "mądre" więc.

Większość programistów uwielbia programować i kochać, aby być lepszym. W ciągu ostatnich kilku lat stałem się całkiem dobry i wiele się nauczyłem. Najważniejszą rzeczą, którą teraz wiem, zwłaszcza gdy piszesz biblioteki, jest spójność i przewidywalność.

Rób rzeczy, które możesz robić konsekwentnie.

+"2" parseInt("2")?

A co z var num =+"2"?

Z tego, co masz ucz się, z umysłów stackoverflow nie jestem zbyt mam nadzieję.

Jeśli zaczniesz podążać za tymi dwoma słowami spójnymi i przewidywalnymi. Poznasz właściwą odpowiedź na mnóstwo pytań dotyczących stackoverflow.

Pokażę Ci, jak to się opłaca. Zwykle umieszczam ; na każdej linii kodu javascript, którą piszę. Wiem, że to bardziej wyraziste. Wiem, że to bardziej jasne. Przestrzegałem moich zasad. Pewnego dnia postanowiłem tego nie robić. Dlaczego? Ponieważ tak wielu ludzi mówi mi, że to nie jest już potrzebne a JavaScript może się bez niego obejść. Więc postanowiłem to zrobić. Teraz, ponieważ stałem się pewien siebie jako programista (ponieważ powinieneś cieszyć się owocem opanowania języka) napisałem coś bardzo prostego i nie sprawdziłem tego. Skasowałem jeden przecinek i nie sądziłem, że muszę ponownie przetestować tak prostą rzecz, jak usunięcie jednego przecinka.

Napisałem coś podobnego w es6 i babel

var a = "hello world"
(async function(){
  //do work
})()

Ten kod nie powiódł się i zajęło wieczność, aby dowiedzieć się. Z jakiegoś powodu, co widział was

var a = "hello world"(async function(){})()

Ukryty głęboko w kodzie źródłowym mówił mi, że "hello world" nie jest funkcją.

Dla większej zabawy node nie pokazuje map źródłowych transpiled code.

Zmarnowałem tyle głupiego czasu. Przedstawiałem komuś również, jak ES6 jest genialny, a następnie musiałem zacząć debugować i zademonstrować, jak wolny od Bólu Głowy i lepszy jest ES6. To nie jest przekonujące.

Mam nadzieję, że to odpowiedź na twoje pytanie. To jest stare pytanie jest bardziej dla przyszłe pokolenie, ludzie, którzy wciąż się uczą.

Pytanie, Kiedy ludzie mówią, że to nie ma znaczenia, tak czy inaczej działa. Są szanse, że mądrzejsza bardziej doświadczona osoba powie Ci innych mądrych.

Co jeśli ktoś nadpisze obiekt location. Zrobią shim dla starszych przeglądarek. Dostanie jakąś nową funkcję, która musi być shimmed i Twój 3-letni Kod się nie powiedzie.

Moja ostatnia notka do rozważenia.

Pisanie czystego, przejrzystego kodu robi coś dla Twój kod, na który nie można odpowiedzieć dobrym lub złym. To, co robi, czyni Twój kod aktywatorem.

Możesz użyć więcej wtyczek rzeczy, bibliotek bez obawy o przerwanie między kodami.

Dla jasności. użyj

window.location.href

 12
Author: Lpc_dark,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-14 02:41:29