2010-04-16 3 views
44

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

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

+0

document.location एक वस्तु – ant

+1

सब कुछ एक वस्तु है। मुझे लगता है कि आपका मतलब क्या है कि 'location.href' के विपरीत, यह एक साधारण स्ट्रिंग नहीं है। –

+1

@Max Shawabkeh yes location.href एक स्ट्रिंग – ant

उत्तर

51

document.locationwindow.location के लिए समानार्थी है जिसे लगभग जावास्क्रिप्ट मौजूद होने तक लगभग बहिष्कृत किया गया है। इसका इस्तेमाल न करें।

location एक संरचित वस्तु है, जो यूआरएल के हिस्सों से संबंधित गुणों के साथ है। location.href एक ही स्ट्रिंग में पूरा यूआरएल है। किसी स्ट्रिंग को असाइन करना उसी प्रकार के नेविगेशन के कारण परिभाषित किया गया है, इसलिए अपना चयन करें।

(मैं location.href= something को लिखने पर विचार मामूली बेहतर यह क्या कर रहा है के बारे में यह थोड़ा और अधिक स्पष्ट है के रूप में किया जाना है। आप आम तौर पर सिर्फ location= something से बचने के लिए के रूप में यह एक चर काम की तरह गुमराह लग रहा है चाहेंगे। window.location= something हालांकि ठीक है।)

+1

है क्या यह 'document.location' या' window.location' है जिसे बहिष्कृत किया गया है? – enguerran

+4

'document.location'। इसे अब HTML5 में बहिष्कृत नहीं किया गया है, इसके लिए यह क्या लायक है। – bobince

+0

तो ... एचटीएमएल 5 में, कुछ भी बहिष्कृत नहीं किया गया है। और 'document.location'' window.location' से समान है 'स्थान' से समान है, है ना? – enguerran

3

दस्तावेज़। स्थान विंडो.लोकेशन के पक्ष में बहिष्कृत किया गया है, जिसे केवल स्थान से एक्सेस किया जा सकता है, क्योंकि यह वैश्विक वस्तु है।

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

3

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

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

20

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

href संपत्ति इन गुणों में से एक है, जिसमें पूरा यूआरएल है, यानी सभी अन्य गुण एक साथ रखे गए हैं।

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

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

+0

बहुत अच्छा स्पष्टीकरण, धन्यवाद। – Michel

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

href संपत्ति, एक श्रृंखला है।

+0

अकेले डॉट-नोटेशन इसे स्पष्ट करता है –

3

जून 14 वीं 2013 (एचटीएमएल 5) के रूप में, एक महत्वपूर्ण अंतर

Browser : Chrome 27.X.X

संदर्भ है: document.location, window.location (MDN)


document.loca tion

type: Object

वस्तु जब अपने आप में कहा जाता document.location अपने origin + pathname गुण श्रेणीबद्ध लौट आते हैं।

केवल स्ट्रिंग के रूप में यूआरएल पुनर्प्राप्त करने के लिए, केवल पढ़ने के लिए document.URL संपत्ति का उपयोग किया जा सकता है।

ancestorOrigins: DOMStringList 
assign: function() { [native code] } 
hash: "" 
host: "stackoverflow.com" 
hostname: "stackoverflow.com" 
href: "http://stackoverflow.com/questions/2652816/what-is-the-difference-between-document-location-href-and-document-location?rq=1" 
origin: "http://stackoverflow.com" 
pathname: "https://stackoverflow.com/questions/2652816/what-is-the-difference-between-document-location-href-and-document-location" 
port: "" 
protocol: "http:" 
reload: function() { [native code] } 
replace: function() { [native code] } 
search: "?rq=1" 
toString: function toString() { [native code] } 
valueOf: function valueOf() { [native code] } 

document.location.href

type: string

http://stackoverflow.com/questions/2652816/what-is-the-difference-between-document-location-href-and-document-location?rq=1 
0

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

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

<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> 

लेकिन इस कोड काम नहीं कर रहा के लिए बजाय, की जगह समारोह सिर्फ अनिर्धारित (कोई अपवाद नहीं फेंक दिया) देता है तो यह कहने के लिए नेविगेट करने के लिए कोशिश करता है एक्स/lng/el-GR/url x पर जाने के बजाए अपरिभाषित। मोज़िला फ़ायरफ़ॉक्स के डीबगर (एफ 12 कुंजी) के साथ इसे जांचकर और कर्सर को curAddr चर पर ले जाना, यह 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> 
संबंधित मुद्दे