क्या दोनों को एक ही वस्तु का संदर्भ देना चाहिए?
क्या दोनों को एक ही वस्तु का संदर्भ देना चाहिए?
जवाबों:
W3C के अनुसार, वे समान हैं। वास्तव में, क्रॉस ब्राउज़र सुरक्षा के लिए, आपको इसके window.location
बजाय उपयोग करना चाहिए document.location
।
window.location
कोई औचित्य प्रदान किए बिना एक सर्वोत्तम अभ्यास (हमेशा उपयोग करने ) की सिफारिश करने के लिए। यदि आप औचित्य प्रदान नहीं करेंगे, तो किसी को आपकी सलाह क्यों लेनी चाहिए? क्रिस्टोफ का जवाब इस संबंध में कहीं अधिक उपयोगी है।
वर्तमान स्थान ऑब्जेक्ट प्राप्त करने के लिए विहित तरीका है window.location
( 1996 से इस MSDN पृष्ठ और 2006 से W3C ड्राफ्ट देखें )।
इसकी तुलना करें document.location
, जो मूल रूप से वर्तमान URL को एक स्ट्रिंग के रूप में लौटाता है ( MSDN पर इस पृष्ठ को देखें )। संभवतः भ्रम से बचने के लिए, ( MSDN पर यहाँ देखें ) के document.location
साथ प्रतिस्थापित किया गया था , जो DOM स्तर 1 का भी हिस्सा है ।document.URL
जहां तक मुझे पता है, सभी आधुनिक ब्राउज़र मैप document.location
करते हैं window.location
, लेकिन मैं अभी भी पसंद window.location
करता हूं कि मैंने अपने पहले DHTML को लिखने के बाद से इसका उपयोग किया है।
window.location
, तो यह सिर्फ उपयोग करने के लिए समान रूप से मान्य नहीं है location
?
window
वस्तु है। इस प्रकार, कोई भी चर या फ़ंक्शन जिसे आप अपनी स्क्रिप्ट के शीर्ष स्तर पर परिभाषित करते हैं, द्वारा संदर्भित ऑब्जेक्ट की एक संपत्ति है window
, जो वैश्विक वस्तु होती है। अनुपस्थित होने पर वैश्विक वस्तु को निहित किया जाता है window.
- इस प्रकार location
व्याख्या की जाती है window.location
। if(an_undefined_variable)
यदि चर को परिभाषित नहीं किया गया था - कैवेट - फ़े एक त्रुटि को फेंक if(window.an_undefined_variable)
देगा - नहीं।
window.location सभी आज्ञाकारी ब्राउज़रों पर पढ़ा / लिखा जाता है।
document.location केवल इंटरनेट एक्सप्लोरर (कम से कम) में पढ़ा जाता है, लेकिन गेको-आधारित ब्राउज़र (फ़ायरफ़ॉक्स, सीमॉन्की) में पढ़ा / लिखा जाता है।
document.location
केवल IE में पढ़े गए दावे को पुन: पेश नहीं कर सकता । मैं IE 10, 9, 8 और 6 में इसे सफलतापूर्वक असाइन कर सकता हूं ( आधुनिक से वीएम का उपयोग करके )।
console.log(location);
!!
document.location
मूल रूप से केवल-पढ़ने के लिए संपत्ति थी, हालांकि गेको ब्राउज़र आपको इसे भी असाइन करने की अनुमति देता है। क्रॉस-ब्राउज़र सुरक्षा के लिए, window.location
इसके बजाय उपयोग करें ।
अधिक पढ़ें:
दिलचस्प बात यह है कि अगर आपके पास 'लोकेशन' नाम का कोई फ्रेम, इमेज या फॉर्म है, तो 'document.location' लोकेशन ऑब्जेक्ट के बजाय क्रमशः फ्रेम विंडो, इमेज या फॉर्म का एक संदर्भ प्रदान करता है। जाहिरा तौर पर, यह इसलिए है क्योंकि document.forms, document.images, और window.frames संग्रह नाम लुकअप को मैपिंग से window.location पर प्राथमिकता मिलती है।
<img name='location' src='location.png'>
if (document.location.tagName == 'IMG') alert('Hello!')
window.location
और document.location
क्रोम या फ़ायरफ़ॉक्स में छाया नहीं किया जा सकता।
जहां तक मुझे पता है, दोनों एक ही हैं। क्रॉस ब्राउज़र सुरक्षा के लिए आप इसके window.location
बजाय उपयोग कर सकते हैं document.location
।
सभी आधुनिक ब्राउज़र मैप document.location
करते हैं window.location
, लेकिन मैं अभी भी पसंद window.location
करता हूं कि मैंने अपना पहला वेब पेज लिखने के बाद से इसका उपयोग किया है। यह अधिक सुसंगत है।
आप document.location === window.location
रिटर्न भी देख सकते हैं true
, जो स्पष्ट करता है कि दोनों समान हैं।
document.location === window.location
रिटर्न true
भी
document.location.constructor === window.location.constructor
है true
नोट: बस फ़ायरफ़ॉक्स 3.6, ओपेरा 10 और IE6 पर परीक्षण किया गया
===
और ==
समतुल्य हैं।
"abc" == new String("abc")
रिटर्न true
जबकि "abc" === new String("abc")
रिटर्न false
।
==
और ===
समतुल्य हो। देखें कल्पना वर्गों 11.9.3 और 11.9.6। गैर-शून्य के लिए, गैर अपरिभाषित, गैर नंबर, गैर bool, एक ही प्रकार के साथ गैर स्ट्रिंग मूल्यों, ==
व्यवहार 11.9.3 हिस्सा 1f, और से नियंत्रित होता है ===
व्यवहार 11.9.6 भाग 7, जो हूबहू पढ़ द्वारा वापसी true
करता है, तो x और y एक ही वस्तु को संदर्भित करते हैं। नहीं तो लौटो false
।
document.location
और window.location
वस्तुओं की ओर इशारा कर रहे हैं। आप ट्रिपल पॉइंट के पूरे बिंदु को याद कर रहे हैं; 2 बराबरी का उपयोग यह साबित नहीं करता है कि वे एक ही ओबज हैं। हमें 3 बराबरी का उपयोग करना चाहिए न कि 2 बराबरी का क्योंकि 2 बराबरी हमें एक झूठी सकारात्मक प्रदान करेगी। एक ब्राउज़र पर जिसके द्वारा document.location एक URL स्ट्रिंग के बराबर है window.location.toString()
, फिर document.location==window.location
वह सही document.location===window.location
वापस आ जाएगा जबकि झूठी वापस आ जाएगी।
document.location === window.location
तुलना जाती है। तथ्य यह है कि .constructor
तुलना बहुत अर्थ में फेंक दी गई है, मुझे लगता है, कि यह उत्तर अभी भी ध्वनि है, लेकिन इसका उपयोग ===
तर्क को सरल करेगा।
हाँ, वे समान हैं। यह जेएस एपीआई ब्राउज़र में कई ऐतिहासिक quirks में से एक है। करने की कोशिश करो:
window.location === document.location
आजकल अंतर देखना दुर्लभ है क्योंकि html 5 अब फ्रेमसेट का समर्थन नहीं करता है। लेकिन उस समय जब हमारे पास फ्रेमसेट, डॉक्यूमेंट होता है। क्लोकेशन केवल उसी फ्रेम को रीडायरेक्ट करेगा, जिसमें कोड निष्पादित किया जा रहा है, और विंडो.लोकेशन पूरे पेज को रीडायरेक्ट करेगा।
मैं कहूंगा कि window.location
वर्तमान URL प्राप्त करने का अधिक विश्वसनीय तरीका है । निम्नलिखित में से एक के बीच का अंतर है window.location
और document.url
यह उस परिदृश्य में सामने आया जहां मैं URL में हैश मापदंडों को जोड़ रहा था और इसे बाद में पढ़ रहा था।
URL में हैश पैरामीटर जोड़ने के बाद।
पुराने ब्राउज़र में, मैं URL का उपयोग करके हैश पैरामीटर प्राप्त करने में सक्षम नहीं था document.url
, लेकिन जब मैंने उपयोग कियाwindow.location
तब मैं URL से हैश पैरामीटर प्राप्त करने में सक्षम था।
इसलिए इसका उपयोग करना हमेशा बेहतर होता है window.location
।
document.URL
गया था - यह था window.location
और के बारे में document.location
। इसके अलावा, document.url
इसका अस्तित्व नहीं है = यह अपरकेस होना चाहिए।
document.location.constructor === window.location.constructor
है true
।
ऐसा इसलिए है क्योंकि यह ठीक उसी वस्तु है जैसा आप देख सकते हैं document.location===window.location
।
इसलिए कंस्ट्रक्टर या किसी अन्य संपत्ति की तुलना करने की आवश्यकता नहीं है।
खैर, वे एक ही हैं, लेकिन ....!
window.location
कुछ इंटरनेट एक्सप्लोरर ब्राउज़रों पर काम नहीं कर रहा है।
ज्यादातर लोग यहां सलाह देते हैं, इस तरह से Google Analytics का डायनामिक प्रोटोकॉल युगों से पहले जैसा दिखता था (इससे पहले कि वे ga.js से analytics.js में चले गए):
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
अधिक जानकारी: https://developers.google.com/analytics/devguides/collection/gajs/
नए संस्करण में उन्होंने '//' का उपयोग किया है इसलिए ब्राउज़र अपने आप प्रोटोकॉल जोड़ सकता है:
'//www.google-analytics.com/analytics.js'
तो अगर Google डॉक्यूमेंट को पसंद करता हैwindow.location
जब वे जे एस में प्रोटोकॉल की जरूरत है, मैं वे उस के लिए कुछ कारणों लगता है।
OVERALL : मेरा व्यक्तिगत रूप से यही मानना है document.location
और window.location
ये समान हैं, लेकिन अगर Google में दस्तावेज़ों का उपयोग करके ब्राउज़रों के उपयोग के बारे में सबसे बड़े आँकड़े हैं , तो मैं उनका अनुसरण करने की सलाह देता हूं।
वास्तव में मैं दोनों के बीच क्रोम में अंतर देखता हूं, उदाहरण के लिए यदि आप चाइल्ड फ्रेम से सैंडबॉक्स वाले फ्रेम में नेविगेशन करना चाहते हैं तो आप यह सिर्फ डॉक्यूमेंट के साथ कर सकते हैं।