Window.location = ve window.location.replace () arasındaki fark nedir?


Yanıtlar:


408

window.location geçmişinize "Geri" yi tıklayabilmeniz (veya yapabilmeniz) gereken bir öğe ekler ve geçerli sayfaya geri dönebilirsiniz.

window.location.replace geçerli geçmiş öğesinin yerini alır, böylece ona geri dönemezsiniz.

Bakınız window.location:

assign(url): Belgeyi sağlanan URL'ye yükleyin.

replace(url): Geçerli belgeyi sağlanan URL'deki belgeyle değiştirin. assign()Yöntemin farkı replace(), geçerli sayfayı kullandıktan sonra oturum geçmişine kaydedilmeyecek olmasıdır, yani kullanıcı sayfaya gitmek için Geri düğmesini kullanamaz.

Oh ve genel olarak konuşursak:

window.location.href = url;

tercih edilir:

window.location = url;

52
Neden window.location.hreftercih edilsin ki window.location?
Mathias Bynens


1
Soru - window.location.replace(URL)URL'nin geçerli URL ile tam olarak aynı olduğu yerlerde kullanırsam , yenilemesini / yeniden yüklemesini bekleyebilir miyim yoksa hiçbir şey yapmama seçeneği var mı?
user9645

11

TLDR;

kullanım location.hrefveya daha iyi kullanım window.location.href;

Ancak bunu okursanız, yadsınamaz kanıtlar elde edersiniz.

Gerçek şu ki, kullanımı gayet iyi ama neden şüpheli şeyler yapıyor? En yüksek yolu seçmeli ve sadece yapılması gerektiği gibi yapmalısınız.

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

Bu kod mükemmel doğru sözdizimi, mantık bilge, tip-bilge yanlış olan tek şey biliyor musunuz?

sahip olduğu locationyerinelocation.href

Peki buna ne dersin

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

değeri mystringnedir? test yapmadan gerçekten bilen var mı? Burada tam olarak ne olacağını kimse bilmiyor. Cehennem sadece bunu yazdım ve ne yaptığını bile bilmiyorum. locationbir nesne ama ben bir dize atamak dize veya konum nesnesi geçecek. Bunun nasıl uygulanması gerektiğine dair bazı cevaplar olduğunu varsayalım. Tüm tarayıcıların aynı şeyi yapacağını garanti edebilir misiniz?

Bu hemen hemen tüm tarayıcılar aynı idare edecek tahmin edebilirsiniz.

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

Eğer bunu derleyiciye yerleştirirseniz, derleyici türünün bunun bir nesne olduğunu varsayacağını söyleyecektir?

Ancak bu konuşma sadece locationnesneden çok daha derindir . Bu dönüşüm ne tür bir programcı olmak istiyor?

Bu kısa yolu alırsanız, evet bugün iyi olabilir, yarın iyi olabilirsiniz, cehennem sonsuza kadar iyi olabilir, ama efendim şimdi kötü bir programcısınız. Senin için iyi olmayacak ve başarısız olacak.

Daha fazla nesne olacak. Yeni sözdizimi olacak.

Sadece bir dizge alan ancak bir nesne döndüren bir alıcı tanımlayabilirsiniz ve en kötü yanı, doğru bir şey yaptığınızı düşüneceksiniz, bu zeki yöntem için parlak olduğunuzu düşünebilirsiniz, çünkü buradaki insanlar utanç verici bir şekilde yoldan sapmışlardır.

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

Alıcılar ve ayarlayıcılarla bu kod gerçekten işe yarayacaktır, ancak bunun yapılabilmesi, bunun 'WISE' olduğu anlamına gelmez.

Programlayan çoğu insan programlamayı sever ve daha iyi olmayı sever. Son birkaç yıl içinde oldukça iyi öğrendim ve çok şey öğrendim. Özellikle Kütüphaneler yazarken bildiğim en önemli şey tutarlılık ve öngörülebilirlik.

Sürekli yapabileceğiniz şeyleri yapın.

+"2"<- burada bu dizeyi bir sayıya ayrıştırır. kullanmalısın ya da kullanmalı parseInt("2")mısın?

Ne hakkında var num =+"2"?

Öğrendiklerinizden, stackoverflow'un akıllarından çok umarım değilim.

Eğer bu 2 kelimeyi takip etmeye başlarsanız tutarlı ve tahmin edilebilir. Stackoverflow ile ilgili bir ton soruya doğru cevabı bileceksiniz.

Size bunun nasıl bir fayda sağladığını göstereyim. Normalde yazdığım ;her javascript satırına yerleştiririm . Daha etkileyici olduğunu biliyorum. Daha açık olduğunu biliyorum. Kurallara uydum. Bir gün yapmamaya karar verdim. Neden? Çünkü pek çok insan bana artık gerek olmadığını ve JavaScript'in onsuz yapabileceğini söylüyor. Peki bunu yapmaya karar verdim. Şimdi bir programcı olarak kendimden emin olduğum için (bir dilde ustalaşmanın meyvesinden zevk almanız gerektiği gibi) çok basit bir şey yazdım ve kontrol etmedim. Bir virgül sildim ve bir virgül kaldırmak gibi basit bir şeyi tekrar test etmem gerektiğini düşünmedim.

Es6 ve babel'de buna benzer bir şey yazdım

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

Bu kod başarısız oldu ve çözülmesi sonsuza dek sürdü. Nedense gördüğü

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

kaynak kodu içinde gizli gizli bana "merhaba dünya" bir işlev değil diyordu.

Daha fazla eğlence için düğüm aktarılan kodun kaynak haritalarını göstermez.

Çok aptalca zaman harcadım. Birisine ES6'nın nasıl parlak olduğu hakkında da sunum yapıyordum ve daha sonra hata ayıklamaya başlamak ve baş ağrısının nasıl daha iyi ve daha iyi ES6 olduğunu göstermek zorunda kaldım. İkna edici değil.

Umarım bu sorunuzu cevaplamıştır. Bu eski bir soru, daha çok gelecek nesiller için, hala öğrenmekte olan insanlar için.

İnsanların her iki şekilde de çalışmasının önemli olmadığını söyledikleri soru. Şans daha akıllı bir kişi size başka bilge söyleyecektir.

Birisi konum nesnesinin üzerine yazarsa ne olur. Eski tarayıcılar için bir şim yapacaklar. Büzülmesi gereken bazı yeni özellikler alacak ve 3 yaşındaki kodunuz başarısız olacaktır.

Düşünmek için son notum.

Temiz, açık amaçlı kod yazmak, kodunuz için doğru veya yanlış cevap veremeyen bir şey yapar. Yaptığı şey, kodunuzu bir etkinleştirici yapmaktır.

Kodlar arasında kesinti korkusu olmayan kütüphaneler, daha fazla şey eklentileri kullanabilirsiniz.

kayıt için. kullanım

window.location.href


24
Tutkuyla tartışılan uzun bilgilendirici cevap. Ama window.location.hrefaşırı kullanımı tartışarak window.location, sorunun aslında bunlar arasındaki farkı sorduğunu unuttun vewindow.location.replace()
AntonChanning

10
TLDR'yi her gördüğümde 5 kat daha uzun bir cevap değil, daha kısa bir cevap bekliyorum.
user9645

3
TLDR; use location.href or better use window.location.href; TLDR bu çizgidir. Gerisi "cevap" tır.
Elysiumplain

Yaygın olmayan kullanım durumu sunarak geçerli bir noktaya değindiğinizi düşünmüyorum. yani mystring = location.href = "#/some/spa/route". Ayrıca, birçok dil bir şekilde (örtük) tipte yayın yapılmasına izin verecektir. Günün sonunda, javascript dinamik yazılan bir dildir, üzerine tür kavramları koyun ve bunun iyi olmadığını söyleyerek hiçbir anlam ifade etmez.
elma elması

1
Birisi konum nesnesinin üzerine yazarsa ne olur . Peki, eğer birisi üzerine yazılırsa consoleveya gölgede kalırsa window- Şimdi daha büyük bir sorununuz var demektir.
elma elması
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.