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.locationyerine kullanmalısınız document.location.
window.locationHerhangi 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.locationile değiştirildidocument.URL .
Gibi bildiğim kadarıyla, tüm modern tarayıcılar harita document.locationiçin window.location, ama yine de tercih window.locationo benim ilk DHTML yazdım beri kullandım ne kadar.
window.location, sadece kullanmak eşit derecede geçerli değil locationmi?
windownesnedir. 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 windownesnenin, 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.locationIE'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.locationGecko 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.locationve document.locationChrome veya Firefox'ta gölgelenemez.
Bildiğim kadarıyla, ikisi de aynı. Çapraz tarayıcı güvenliği için kullanmak window.locationyerine kullanabilirsiniz document.location.
Tüm modern tarayıcılar harita document.locationiçin window.location, ama yine de tercih window.locationo 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.locationgetirileri 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 trueiken "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 trueeğer x ve y aynı nesneyi belirtir. Aksi takdirde geri dönün false.
document.locationve window.locationnesnelere 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.locationtrue document.location===window.locationdeğerini döndürürken false döndürür.
document.location === window.locationkarşılaştırma kadar oldukça haklısın. Aslında .constructorkarşı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.locationMevcut 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.locationve arasındaki fark document.urlaş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.locationhash parametrelerini URL'den alabildim.
Bu yüzden kullanmak her zaman daha iyidir window.location.
document.URL- hakkında window.locationve oldu document.location. Ayrıca, document.urlyok = 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.locationonlar JS protokolü gerektiğinde, ben bunun için bazı nedenleri var sanırım.
GENEL : Ben şahsen inanıyorum document.locationve window.locationaynı 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.