Her ikisi de aynı nesneye başvurmalı mıdır?
Her ikisi de aynı nesneye başvurmalı mıdır?
Yanıtlar:
W3C'ye göre, bunlar aynı. Gerçekte, tarayıcılar arası güvenlik için kullanmak window.location
yerine kullanmalısınız document.location
.
window.location
Herhangi bir gerekçe sunmadan en iyi uygulamayı (her zaman kullanarak ) tavsiye etmek için -1 . Gerekçeyi sağlamazsan neden birileri tavsiyeni alsın? Christoph'un cevabı bu konuda çok daha faydalı.
Geçerli konum nesnesini almanın standart yolu window.location
( 1996'dan itibaren bu MSDN sayfasına ve 2006'dan itibaren W3C taslağına bakınız ).
Bunu document.location
, başlangıçta yalnızca geçerli URL'yi bir dize olarak döndüren ile karşılaştırın (MSDN'deki bu sayfaya bakın ). Muhtemelen karışıklığı önlemek için , aynı zamanda DOM Seviye 1'in bir parçası olan ( buraya MSDN'de bakınız ) document.location
ile değiştirildidocument.URL
.
Gibi bildiğim kadarıyla, tüm modern tarayıcılar harita document.location
için window.location
, ama yine de tercih window.location
o benim ilk DHTML yazdım beri kullandım ne kadar.
window.location
, sadece kullanmak eşit derecede geçerli değil location
mi?
window
nesnedir. Bu nedenle, komut dosyanızın en üst düzeyinde tanımladığınız herhangi bir değişken veya işlev, başvuruda bulunulan window
nesnenin, genel nesne olan bir özelliğidir. Küresel nesne, yokken ima edilir window.
- dolayısıyla bu location
şekilde yorumlanır window.location
. Uyarılar - fe if(an_undefined_variable)
değişken tanımlanmadıysa bir hata atar - if(window.an_undefined_variable)
yapmaz.
window.location tüm uyumlu tarayıcılarda okunur / yazılır.
document.location , Internet Explorer'da salt okunurdur (en azından), ancak Gecko tabanlı tarayıcılarda (Firefox, SeaMonkey) okuma / yazma işlemidir.
document.location
IE'de salt okunur olan talebi yeniden oluşturamıyorum . IE 10, 9, 8 ve 6'da başarılı bir şekilde atayabilirim ( modern.ie'den VM'ler kullanarak ).
console.log(location);
? !!
document.location
Gecko tarayıcıları da atamanıza izin vermesine rağmen, aslında salt okunur bir özellikti . Tarayıcılar arası güvenlik için şunu kullanın:window.location
kullanın.
Daha fazla oku:
İlginç bir şekilde, 'konum' adında bir çerçeve, resim veya formunuz varsa, 'document.location', Location nesnesi yerine sırasıyla çerçeve penceresine, resme veya forma başvuru sağlar. Görünüşe göre, bunun nedeni document.forms, document.images ve window.frames koleksiyon adı aramasının window.location eşlemesine göre önceliğe sahip olmasıdır.
<img name='location' src='location.png'>
if (document.location.tagName == 'IMG') alert('Hello!')
window.location
ve document.location
Chrome veya Firefox'ta gölgelenemez.
Bildiğim kadarıyla, ikisi de aynı. Çapraz tarayıcı güvenliği için kullanmak window.location
yerine kullanabilirsiniz document.location
.
Tüm modern tarayıcılar harita document.location
için window.location
, ama yine de tercih window.location
o benim ilk web sayfasını yazdı beri kullandım ne kadar. daha tutarlıdır.
her ikisinin de aynı olduğunu açıklayan document.location === window.location
getirileri de görebilirsiniz true
.
document.location === window.location
İadeler true
Ayrıca
document.location.constructor === window.location.constructor
dır-dir true
Not: Sadece test edildi, Firefox 3.6, Opera 10 ve IE6
===
ve ==
eşdeğerdir.
"abc" == new String("abc")
döner true
iken "abc" === new String("abc")
döner false
.
==
ve ===
eşdeğerdir. Bkz Spec bölümleri 11.9.3 ve 11.9.6. Olmayan boş için, sigara tanımsız olmayan sayı olmayan bool, aynı tip olmayan dize değerleri, ==
davranış 11.9.3 kısım 1f ve tabidir ===
aynı okunan 11.9.6 parçası 7 ile davranış Return true
eğer x ve y aynı nesneyi belirtir. Aksi takdirde geri dönün false
.
document.location
ve window.location
nesnelere işaret ediyor. Üçlü eşitliğin tüm noktasını kaçırıyorsunuz; 2 eşittir kullanmak , aynı hedef olduklarını kanıtlamaz . 2 eşit değil 3 eşit olmalı, çünkü 2 eşittir bize yanlış pozitif verecektir. Document.location öğesinin eşit olduğu bir URL dizesi olduğu bir tarayıcıda window.location.toString()
, Sonra document.location==window.location
true document.location===window.location
değerini döndürürken false döndürür.
document.location === window.location
karşılaştırma kadar oldukça haklısın. Aslında .constructor
karşılaştırma da araçlarında atılır, bu cevabı hala sağlam olduğunu, düşünüyorum, ama kullanarak ===
muhakeme basitleştirmek olur.
Evet, onlar aynı. Tarayıcı JS API'sındaki birçok tarihi tuhaflıktan biridir. Yapmayı dene:
window.location === document.location
Günümüzde farkı görmek nadirdir çünkü html 5 artık çerçeve kümelerini desteklemez. Ancak çerçeve kümemiz olduğunda, document.location yalnızca kodun yürütülmekte olduğu kareyi yeniden yönlendirir ve window.location tüm sayfayı yeniden yönlendirir.
window.location
Mevcut URL'yi almanın daha güvenilir yolu olduğunu söyleyebilirim . URL'de karma parametreleri ekleyip daha sonra okuduğum senaryolardan birinde öne çıkan window.location
ve arasındaki fark document.url
aşağıdadır.
URL'ye karma parametreleri ekledikten sonra.
Eski bir tarayıcıda, hash parametrelerini kullanarak URL'den alamadım document.url
, ancak kullandığımda window.location
hash parametrelerini URL'den alabildim.
Bu yüzden kullanmak her zaman daha iyidir window.location
.
document.URL
- hakkında window.location
ve oldu document.location
. Ayrıca, document.url
yok = büyük harf olmalıdır.
document.location.constructor === window.location.constructor
dır-dir true
.
Çünkü tam olarak görebileceğiniz nesne document.location===window.location
.
Dolayısıyla, yapıcıyı veya başka bir mülkü karşılaştırmaya gerek yoktur.
Evet, onlar aynı, ama ....!
window.location
bazı Internet Explorer tarayıcılarında çalışmıyor.
Çoğu insanın burada önermesine rağmen, Google Analytics'in dinamik protokolü snipleri asırlardır (son zamanlarda ga.js'den analytics.js'ye geçmeden önce) şöyle görünüyordu:
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
Daha fazla bilgi: https://developers.google.com/analytics/devguides/collection/gajs/
Yeni sürümde '//' kullandılar, böylece tarayıcı otomatik olarak protokol ekleyebilir:
'//www.google-analytics.com/analytics.js'
Yani eğer Google tercih document.location için window.location
onlar JS protokolü gerektiğinde, ben bunun için bazı nedenleri var sanırım.
GENEL : Ben şahsen inanıyorum document.location
ve window.location
aynı fakat gibi tarayıcıların kullanımı hakkında büyük istatistiklerle dev eğer Google kullanarak document.location , onları takip etmek önerilir.
Aslında, ikisi arasında krom farkı fark ediyorum. Örneğin, alt çerçeveden korumalı alan çerçevesine gezinme yapmak istiyorsanız, bunu sadece document.location ile yapabilirsiniz, ancak window.location ile yapabilirsiniz.