Kiedy ustawisz location
ciąg adresu URL a ustawienie location.href
?
location = "http://www.stackoverflow.com";
vs
location.href = "http://www.stackoverflow.com";
javascript
chimeryczny
źródło
źródło
location.href
nie powiodło się z powodu zasad tego samego pochodzenia: javascript.info/tutorial/…replace
iassign
: stackoverflow.com/q/1865837/632951 , stackoverflow.com/q/7703689/632951 , stackoverflow.com/q/10302905/632951Odpowiedzi:
Możesz ustawić
location
bezpośrednio, ponieważ jest nieco krótszy. Jeśli próbujesz być zwięzły, zwykle możesz też pominąćwindow.
.URL przypisania do obu
location.href
ilocation
są zdefiniowane do pracy w JavaScript 1.0, z powrotem w Netscape 2 i zostały wdrożone w każdej przeglądarce międzyczasie. Wybierz więc i użyj tego, co znajdziesz najwyraźniej.źródło
Nawet jeśli oba działają, użyłbym tego drugiego.
location
jest obiektem, a przypisanie łańcucha do obiektu nie wróży dobrze dla czytelności lub konserwacji.źródło
window.location
: nie wymagaSAME ORIGIN
.location = 'http://www.example.com'
wydaje się bardzo czytelna. Chociaż jako szczególny przypadek. To jest kompatybilne wstecz i pozostanie kompatybilne w dającej się przewidzieć przyszłości.Jak już powiedziano,
.location
jest przedmiotemAle ta osoba zasugerowała użycie jednego z nich.Ale lepiej będzie użyć tej.href
wersji.Obiekty mają właściwości domyślne, które, o ile nie określono inaczej, są przyjmowane. W przypadkulocation
obiektu ma właściwość o nazwie.href
. Nie podając ŻADNEJ właściwości podczas przypisywania, domyślnie przyjmuje wartość „href”.Wszystko jest w porządku, dopóki nie zmieni się późniejsza wersja modelu obiektowego i albo nie ma już właściwości domyślnej, albo właściwość domyślna zostaje zmieniona. Wtedy twój program nieoczekiwanie psuje się.
Jeśli masz na myślihref
, powinieneś podaćhref
.źródło
location
działania, ponieważ właściwość została zdefiniowana tak, aby mieć to specjalne zachowanie przypisania z powrotem w JavaScript 1.0 i od tej pory każda przeglądarka to zaimplementowała. HTML5 teraz tego wymaga. Więc chociaż przypisywanie do tego może być ładniejsze lub bardziej spójne.href
, nie ma w tym żadnej przewagi kompatybilności wstecznej ani w przód.window.location = url
jest ładniejszylocation = url
jestKilka lat temu
location
nie działało dla mnie w IE ilocation.href
działało (i oba działały w innych przeglądarkach). Od tego czasu zawsze używałemlocation.href
i nigdy więcej nie miałem problemów. Nie pamiętam, która to była wersja IE.źródło
strict mode
chrome wyrzuci wyjątek, jeśli spróbujesz przypisać również bezpośredniolocation
, więc zawsze używamlocation.href
Aby wyjaśnić, nie możesz tego zrobić
location.split('#')
,location
to obiekt, a nie ciąg znaków. Ale możesz to zrobić,location.href.split('#');
ponieważlocation.href
to ciąg znaków.źródło
Należy jednak pamiętać o jednej różnicy.
Załóżmy, że chcesz zbudować jakiś adres URL przy użyciu bieżącego adresu URL. Poniższy kod przekieruje cię, ponieważ nie dzwoni,
String.replace
aleLocation.replace
:Działa następujące kody:
źródło
Z maszynopis użytku
window.location.href
jakwindow.location
to technicznie obiekt zawierający:Ustawienie
window.location
spowoduje wystąpienie błędu typu, podczas gdywindow.location.href
jest typu string.Źródło
źródło