javascript - Vad är skillnaden mellan window.location= och window.location.replace()?


Finns det en skillnad mellan dessa två rader?

var url = "http://www.google.com/";
window.location = url;
window.location.replace(url);

Svar #1

window.location lägger till ett objekt i din historik på det sättet att du kan (eller bör kunna) klicka på "Tillbaka" och gå tillbaka till den aktuella sidan.

window.location.replace ersätter det nuvarande historikobjektet så att du inte kan gå tillbaka till det.

Se window.location:

assign(url): Ladda dokumentet på den angivna URL:en.

replace(url): Ersätt det aktuella dokumentet med det som finns på den angivna URL:en. Skillnaden från assign()-metoden är att efter att ha använt replace() kommer den aktuella sidan inte att sparas i sessionshistoriken, vilket innebär att användaren inte kan använda Tillbaka-knappen för att navigera till den.

Oj och generellt sett:

window.location.href = url;

föredras framför:

window.location = url;

Svar #2

Sammanfattning;

använd location.href eller ännu bättre använd window.location.href;

Men om du läser detta kommer du att få obestridliga bevis.

Sanningen är att det är okej att använda, men varför göra saker som är tvivelaktiga. Du borde ta den högre vägen och bara göra det på det sätt som det förmodligen borde göras.

location = "#/mypath/otherside"
var sections = location.split('/')

Denna kod är helt korrekt syntaxmässigt, logikmässigt, typmässigt vet du det enda som är fel med den?

det har location istället för location.href

vad sägs om det här

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

vad är värdet på mystring? Vet någon verkligen utan att göra ett test. Ingen vet exakt vad som kommer hända här. Helvete, jag skrev precis detta och jag vet inte ens vad det gör. location är ett objekt men jag tilldelar en sträng, kommer den att skicka strängen eller skicka location-objektet. Låt oss säga att det finns något svar på hur detta borde implementeras. Kan du garantera att alla webbläsare kommer göra samma sak?

Detta kan jag ganska mycket gissa att alla webbläsare kommer att hantera på samma sätt.

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

Vad händer om du placerar detta i TypeScript, kommer det att gå sönder eftersom typkompilatorn kommer att säga att detta ska vara ett objekt?

Den här konversationen är dock mycket djupare än bara location-objektet. Vad den här konversationen handlar om är vilken typ av programmerare du vill vara?

Om du tar den här genvägen, ja det kanske är okej idag, ja det kanske är okej imorgon, för all del det kanske är okej för alltid, men du, herrn, är nu en dålig programmerare. Det kommer inte vara okej för dig och det kommer svika dig.

Det kommer att finnas fler objekt. Det kommer att finnas ny syntax.

Du kan definiera en getter som bara tar en sträng men returnerar ett objekt och det värsta är att du kommer tro att du gör något korrekt, du kanske tror att du är briljant för denna smarta metod eftersom folk här skamlöst har vilselett dig.

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

Med getters och setters skulle denna kod faktiskt fungera, men bara för att det kan göras betyder det inte att det är 'VIS' att göra det.

De flesta som programmerar älskar att programmera och älskar att bli bättre. Under de senaste åren har jag blivit ganska bra och lärt mig mycket. Det viktigaste jag vet nu, särskilt när man skriver bibliotek, är konsekvens och förutsägbarhet.

Gör de saker som du konsekvent kan göra.

+"2" <-- detta här omvandlar strängen till ett nummer. Bör du använda det? Eller bör du använda parseInt("2")?

vad sägs om var num =+"2"?

Av det du har lärt dig, från sinnena på Stackoverflow är jag inte alltför hoppfull.

Om du börjar följa dessa 2 ord konsekvent och förutsägbart. Kommer du att veta det rätta svaret på en massa frågor på Stackoverflow.

Låt mig visa dig hur detta lönar sig. Normalt placerar jag ; på varje rad av javascript jag skriver. Jag vet att det är mer uttrycksfullt. Jag vet att det är tydligare. Jag har följt mina regler. En dag bestämde jag mig för att inte göra det. Varför? För att så många människor säger till mig att det inte längre behövs och att JavaScript kan klara sig utan det. Så vad bestämde jag mig för att göra detta. Nu, eftersom jag har blivit säker på mig själv som programmerare (som du bör njuta av frukten av att behärska ett språk), skrev jag något mycket enkelt och jag kontrollerade det inte. Jag raderade ett kommatecken och jag tänkte inte att jag behövde testa det på nytt för en så enkel sak som att ta bort ett kommatecken.

Jag skrev något liknande detta i es6 och babel

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

Denna kod misslyckades och tog evigheter att lista ut. Av någon anledning var det den såg

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

dold djupt inom källkoden sa det till mig "hello world" är inte en funktion.

För mer nöje visar inte Node källkartorna för transkoderad kod.

Slösade bort så mycket dum tid. Jag höll på att presentera för någon också om hur fantastiskt ES6 är och sedan var jag tvungen att börja debugga och visa hur problemfritt och bättre ES6 är. Inte övertygande, eller hur.

Jag hoppas att detta besvarade din fråga. Eftersom detta är en gammal fråga är den mer riktad till framtida generationer, människor som fortfarande lär sig.

Fråga när folk säger att det inte spelar någon roll fungerar. Chansen är att en klokare, mer erfaren person kommer att säga något annat.

vad händer om någon skriver över platsobjektet. De kommer att göra en shim för äldre webbläsare. Det kommer att få någon ny funktion som behöver shimmas och din tre år gamla kod kommer att misslyckas.

Mitt sista meddelande att fundera över.

Att skriva ren, tydlig och målmedveten kod gör något för din kod som inte kan besvaras med rätt eller fel. Vad det gör är att det gör din kod till en möjliggörare.

Du kan använda fler saker som plugins, bibliotek utan rädsla för avbrott mellan koderna.

för protokollet. använd

window.location.href

Relaterade artiklar