javascript - questions - Document.location.href और document.location के बीच अंतर क्या है?




javascript programs (5)

डॉक्युमेंट.लोकेशन को window.location के पक्ष में चित्रित किया जाता है, जिसे केवल एक वैश्विक वस्तु के रूप में देखा जा सकता है।

स्थान ऑब्जेक्ट में कई गुण और विधियाँ हैं। यदि आप इसे स्ट्रिंग के रूप में उपयोग करने का प्रयास करते हैं तो यह स्थान की तरह काम करता है।

document.location.href और document.location बीच अंतर क्या है?

क्या यह ब्राउज़रों में समान है?


यहाँ अंतर के व्यावहारिक महत्व का एक उदाहरण है और यदि आप इसे महसूस नहीं करते हैं तो यह आपको कैसे काट सकता है (दस्तावेज। किसी वस्तु और document.location.href एक स्ट्रिंग होने के नाते):

हम http://social.ClipFlair.net पर मोनोएक्स सामाजिक सीएमएस ( http://mono-software.com ) मुफ्त संस्करण का उपयोग करते हैं और हम उन्हें स्थानीय बनाने के लिए कुछ पृष्ठों पर भाषा पट्टी वेबपार्ट को जोड़ना चाहते थे, लेकिन कुछ अन्य (जैसे चर्चा में) हम स्थानीयकरण का उपयोग नहीं करना चाहते थे। इसलिए हमने अपने सभी .aspx (ASP.net) पृष्ठों पर उपयोग करने के लिए दो मास्टर पेज बनाए, पहले एक में हमारे पास लैंग्वेज बार वेबपार्ट था और दूसरे में निम्नलिखित लिपि / एलएनजी / एलआर-जीआर आदि को हटाने की स्क्रिप्ट थी। URL और उन पृष्ठों के बजाय डिफ़ॉल्ट (हमारे मामले में अंग्रेजी) भाषा दिखाते हैं

<script>
  var curAddr = document.location; //MISTAKE
  var newAddr = curAddr.replace(new RegExp("/lng/[a-z]{2}-[A-Z]{2}", "gi"), "");
  if (curAddr != newAddr)
    document.location = newAddr;
</script>

लेकिन यह कोड काम नहीं कर रहा है, फ़ंक्शन को केवल अपरिभाषित रिटर्न देता है (कोई अपवाद नहीं फेंका गया है) इसलिए यह xl / lng / el-GR / अपरिभाषित कहने के लिए नेविगेट करने की कोशिश करता है बजाय यूआरएल x पर जाने के। मोज़िला फ़ायरफ़ॉक्स के डीबगर (F12 कुंजी) के साथ इसे देखना और कर्सर को कर्व्ड चर पर ले जाना URL के लिए कुछ सरल स्ट्रिंग मान के बजाय बहुत सारी जानकारी दिखा रहा था। उस पॉपअप से वॉच को सेलेक्ट करते हुए आप वॉच पेन में देख सकते थे कि वह "लोकेशन -> ..." के बजाय url के लिए "..." लिख रहा था। इससे मुझे एहसास हुआ कि यह एक वस्तु थी

किसी ने अपवाद या कुछ फेंकने के लिए प्रतिस्थापन की अपेक्षा की होगी, लेकिन अब जब मुझे लगता है कि समस्या यह है कि यह URL ऑब्जेक्ट पर कुछ गैर-मौजूद "प्रतिस्थापित" विधि को कॉल करने की कोशिश कर रहा था जो कि अभी "अपरिभाषित" को वापस देने के लिए लगता है जावास्क्रिप्ट।

उस मामले में सही कोड है:

<script>
  var curAddr = document.location.href; //CORRECT
  var newAddr = curAddr.replace(new RegExp("/lng/[a-z]{2}-[A-Z]{2}", "gi"), "");
  if (curAddr != newAddr)
    document.location = newAddr;
</script>

document.location एक ऐसी वस्तु है जिसमें वर्तमान स्थान के लिए गुण होते हैं।

href प्रॉपर्टी इनमें से एक प्रॉपर्टी है, जिसमें पूरा URL होता है, यानी अन्य सभी प्रॉपर्टी को एक साथ रखा जाता है।

कुछ ब्राउज़र आपको location ऑब्जेक्ट के लिए एक URL असाइन करने की अनुमति देते हैं और कार्य करते हैं जैसे कि आपने इसे href प्रॉपर्टी को सौंपा है। कुछ अन्य ब्राउज़र अधिक picky हैं, और आपको href प्रॉपर्टी का उपयोग करने की आवश्यकता होती है। इस प्रकार, सभी ब्राउज़रों में कोड काम करने के लिए, आपको href प्रॉपर्टी का उपयोग करना होगा।

window और document ऑब्जेक्ट दोनों में location ऑब्जेक्ट होता है। आप URL को window.location.href या document.location.href का उपयोग करके सेट कर सकते हैं। हालाँकि, तार्किक रूप से document.location ऑब्जेक्ट को केवल पढ़ा जाना चाहिए (जैसा कि आप किसी दस्तावेज़ का URL नहीं बदल सकते, URL को बदलकर नया दस्तावेज़ लोड करता है), इसलिए सुरक्षित पक्ष पर रहने के लिए आपको window.location.href उपयोग करना चाहिए window.location.href जब आप URL सेट करना चाहते हैं।


document.location एक ऑब्जेक्ट है, जबकि document.location.href एक स्ट्रिंग है। लेकिन पूर्व में एक toString विधि है, इसलिए आप इसे पढ़ सकते हैं जैसे कि यह एक स्ट्रिंग था और document.location.href के समान मान प्राप्त करें। document.location.href

कुछ ब्राउज़रों में - अधिकांश आधुनिक, मुझे लगता है - आप document.location को भी असाइन कर सकते हैं। जैसे कि यह एक स्ट्रिंग था। हालांकि मोज़िला प्रलेखन के अनुसार, इस उद्देश्य के लिए window.location का उपयोग करना बेहतर है क्योंकि document.location मूल रूप से केवल-पढ़ने के लिए था और इसलिए व्यापक रूप से समर्थित नहीं हो सकता है।


typeof document.location; // 'object'
typeof document.location.href; // 'string'

href प्रॉपर्टी एक स्ट्रिंग है, जबकि document.location अपने आप में एक ऑब्जेक्ट है।







javascript