Window.location = और window.location.replace () के बीच क्या अंतर है?


273

क्या इन दोनों लाइनों में अंतर है?

var url = "http://www.google.com/";
window.location = url;
window.location.replace(url);

3
मैंने इसे यहाँ भी समझाया: stackoverflow.com/questions/846954/…
मैथियास ब्यनेंस

जवाबों:


408

window.location अपने इतिहास में एक आइटम जोड़ता है जिसमें आप "बैक" पर क्लिक कर सकते हैं (चालू करने में सक्षम होना चाहिए) और वर्तमान पृष्ठ पर वापस जाएं।

window.location.replace वर्तमान इतिहास आइटम को बदल देता है ताकि आप उस पर वापस न जा सकें।

देखें window.location:

assign(url): दिए गए URL पर दस्तावेज़ लोड करें।

replace(url): वर्तमान दस्तावेज़ को दिए गए URL पर एक के साथ बदलें। assign()विधि से अंतर यह है कि replace()वर्तमान पृष्ठ का उपयोग करने के बाद सत्र इतिहास में सहेजा नहीं जाएगा, जिसका अर्थ है कि उपयोगकर्ता इसे नेविगेट करने के लिए बैक बटन का उपयोग करने में सक्षम नहीं होगा।

ओह और आम तौर पर बोल:

window.location.href = url;

पर इष्ट है:

window.location = url;

52
window.location.hrefपर एहसान क्यों किया जाएगा window.location?
मथियास बीनेंस

13
यहाँ चर्चा: stackoverflow.com/questions/2383401/…
goodeye

1
प्रश्न - अगर मैं उपयोग करता हूं window.location.replace(URL)जहां URL वर्तमान के समान ही है, तो क्या मैं इसे रीफ्रेश / रीलोड करने की अपेक्षा कर सकता हूं या इसमें कुछ भी नहीं करने का विकल्प है?
user9645

11

TLDR;

उपयोग location.hrefया बेहतर उपयोग window.location.href;

हालांकि यदि आप इसे पढ़ते हैं तो आप निर्विवाद प्रमाण प्राप्त करेंगे।

यह सच है कि इसका उपयोग करना ठीक है लेकिन ऐसी चीजें क्यों करें जो संदिग्ध हैं। आपको उच्च सड़क लेनी चाहिए और बस इसे इस तरह से करना चाहिए कि यह संभवतः किया जाना चाहिए।

location = "#/mypath/otherside"
var sections = location.split('/')

यह कोड पूरी तरह से सही सिंटैक्स-वार, लॉजिक वार, टाइप-वाइज है जिसे आप जानते हैं कि केवल एक चीज ही गलत है?

इसके locationबजाय हैlocation.href

इस बारे में क्या

var mystring = location = "#/some/spa/route"

का मूल्य क्या है mystring? क्या कोई वास्तव में कुछ परीक्षण किए बिना जानता है। कोई नहीं जानता कि वास्तव में यहाँ क्या होगा। हेल ​​मैंने अभी यह लिखा है और मुझे नहीं पता कि यह क्या करता है। locationएक वस्तु है, लेकिन मैं एक स्ट्रिंग निर्दिष्ट कर रहा हूँ यह स्ट्रिंग को पास करेगा या स्थान ऑब्जेक्ट को पास करेगा। आइए बताते हैं कि इसको कैसे लागू किया जाना चाहिए, इसका कुछ जवाब है। क्या आप गारंटी दे सकते हैं कि सभी ब्राउज़र एक ही काम करेंगे?

यह मैं बहुत अनुमान लगा सकता हूं कि सभी ब्राउज़र एक ही संभाल लेंगे।

var mystring = location.href = "#/some/spa/route"

यदि आप इसे टाइपस्क्रिप्ट में रखते हैं तो क्या यह टूट जाएगा क्योंकि टाइप कंपाइलर कहेगा कि यह एक वस्तु है?

यह वार्तालाप locationहालांकि सिर्फ वस्तु से बहुत गहरा है । यह रूपांतरण इस बारे में है कि आप किस तरह का प्रोग्रामर बनना चाहते हैं?

यदि आप इस शॉर्ट-कट को लेते हैं, तो यह आज ठीक हो सकता है, कल यह ठीक हो सकता है, नरक यह हमेशा के लिए ठीक हो सकता है, लेकिन आप श्रीमान अब एक बुरा प्रोग्रामर हैं। यह आपके लिए ठीक नहीं होगा और यह आपको विफल कर देगा।

अधिक वस्तुएं होंगी। नया वाक्यविन्यास होगा।

आप एक ऐसे गटर को परिभाषित कर सकते हैं जो केवल एक स्ट्रिंग लेता है, लेकिन एक वस्तु लौटाता है और सबसे खराब हिस्सा यह है कि आप सोचेंगे कि आप कुछ सही कर रहे हैं, आप सोच सकते हैं कि आप इस चतुर विधि के लिए प्रतिभाशाली हैं क्योंकि यहां के लोगों ने आपको शर्मिंदा कर दिया है।

var Person.name = {first:"John":last:"Doe"}
console.log(Person.name) // "John Doe"

गेटर्स और सेटर्स के साथ यह कोड वास्तव में काम करेगा, लेकिन सिर्फ इसलिए कि यह किया जा सकता है इसका मतलब यह नहीं है कि ऐसा करने के लिए यह 'WISE' है।

ज्यादातर लोग जो प्रोग्राम को प्यार कर रहे हैं और बेहतर पाने के लिए प्यार करते हैं। पिछले कुछ वर्षों में मैंने काफी अच्छा हासिल किया है और बहुत कुछ सीखा है। सबसे महत्वपूर्ण बात जो मुझे अब पता है, खासकर जब आप लाइब्रेरी लिखते हैं तो स्थिरता और पूर्वानुमान है।

उन कामों को करें जिन्हें आप लगातार कर सकते हैं।

+"2"<- यह यहीं पर स्ट्रिंग को एक संख्या तक पहुंचाता है। क्या आपको इसका उपयोग करना चाहिए? या आपको उपयोग करना चाहिए parseInt("2")?

किस बारे में var num =+"2"?

स्टैकओवरफ्लो के दिमाग से आपने जो कुछ भी सीखा है, उससे बहुत उम्मीद नहीं है।

यदि आप इन 2 शब्दों का अनुसरण सुसंगत और अनुमानित करने लगते हैं। स्टैकओवरफ़्लो पर एक टन प्रश्नों का सही उत्तर आपको पता चल जाएगा।

मुझे दिखाओ कि यह कैसे भुगतान करता है। आम तौर पर मैं ;जावास्क्रिप्ट की हर पंक्ति पर लिखता हूं। मुझे पता है कि यह अधिक स्पष्ट है। मुझे पता है कि यह अधिक स्पष्ट है। मैंने अपने नियमों का पालन किया है। एक दिन मैंने फैसला किया कि नहीं। क्यों? क्योंकि बहुत सारे लोग मुझे बता रहे हैं कि इसकी अब कोई जरूरत नहीं है और जावास्क्रिप्ट इसके बिना कर सकता है। इसलिए मैंने ऐसा करने का फैसला किया। अब क्योंकि मैं एक प्रोग्रामर के रूप में अपने स्वयं के बारे में सुनिश्चित हो गया हूं (जैसा कि आपको किसी भाषा में महारत हासिल करने के फल का आनंद लेना चाहिए) मैंने कुछ बहुत ही सरल लिखा था और मैंने इसकी जांच नहीं की। मैंने एक अल्पविराम मिटा दिया और मुझे नहीं लगा कि मुझे एक अल्पविराम को हटाने के लिए इतनी सरल चीज़ के लिए फिर से परीक्षण करने की आवश्यकता है।

मैंने es6 और बेबेल में ऐसा ही कुछ लिखा है

var a = "hello world"
(async function(){
  //do work
})()

यह कोड विफल हो गया और हमेशा के लिए इसका पता लगा लिया। किसी कारण से यह जो देखा वह था

var a = "hello world"(async function(){})()

स्रोत कोड के भीतर छिपा हुआ यह मुझे बता रहा था "हैलो वर्ल्ड" एक फ़ंक्शन नहीं है।

अधिक मज़ेदार नोड के लिए ट्रांसपोंड कोड के स्रोत नक्शे नहीं दिखाए जाते हैं।

इतना बेवकूफ समय बर्बाद किया। मैं किसी के साथ पेश कर रहा था कि ईएस 6 शानदार कैसे है और फिर मुझे डिबगिंग शुरू करनी थी और यह दिखाना था कि ईएस 6 कितना सिरदर्द मुक्त और बेहतर है। यकीन नहीं हो रहा है।

मुझे उम्मीद है इसने आपके सवाल का जवाब दे दिया है। यह एक पुराना सवाल है, यह भविष्य की पीढ़ी के लिए अधिक है, जो लोग अभी भी सीख रहे हैं।

सवाल जब लोग कहते हैं कि यह किसी भी तरह से काम नहीं करता है। संभावना एक बुद्धिमान अधिक अनुभवी व्यक्ति आपको अन्य बुद्धिमान बताएगा।

क्या होगा अगर कोई स्थान ऑब्जेक्ट को अधिलेखित करता है। वे पुराने ब्राउज़रों के लिए एक शिम करेंगे। इसमें कुछ नए फ़ीचर मिलेंगे जिन्हें शिम करने की ज़रूरत है और आपका 3 साल पुराना कोड फेल हो जाएगा।

पर विचार करने के लिए मेरा आखिरी नोट।

साफ, स्पष्ट उद्देश्यपूर्ण कोड लिखना आपके कोड के लिए कुछ ऐसा करता है जिसका उत्तर सही या गलत नहीं हो सकता। यह क्या करता है यह आपके कोड को एक एनबलर बनाता है।

आप कोड के बीच रुकावट के डर के साथ अधिक चीजें प्लगइन्स, लाइब्रेरी का उपयोग कर सकते हैं।

रिकार्ड के लिए। उपयोग

window.location.href


24
लंबे सूचनात्मक जवाब, जोश से बहस की। लेकिन window.location.hrefओवर के उपयोग के लिए बहस करने में window.location, आप वास्तव में इस सवाल को भूल गए कि इन और के बीच अंतर के लिए पूछ रहा थाwindow.location.replace()
एंटोनचेंजिंग

10
कभी भी मुझे TLDR दिखाई देता है, मैं एक SHORTER जवाब की उम्मीद करता हूं, एक नहीं जो 5x लंबा है।
user9645

3
TLDR; use location.href or better use window.location.href; TLDR यह रेखा है। शेष "उत्तर" है।
एलीसिमप्लैन 22

मुझे नहीं लगता कि आप असामान्य उपयोग के मामले को पेश करके वैध बिंदु बनाते हैं। यानी mystring = location.href = "#/some/spa/route"। इसके अलावा, कई भाषाएं (निहित) प्रकार को किसी तरह से डालने की अनुमति देती हैं। दिन के अंत में, जावास्क्रिप्ट एक गतिशील टाइप की गई भाषा है, इस पर प्रकार की अवधारणाएं डालें और कहें कि यह अच्छा नहीं है, इससे कोई मतलब नहीं है।
सेब सेब

1
क्या होगा अगर कोई स्थान ऑब्जेक्ट को अधिलेखित करता है । ठीक है, जैसे कि अगर कोई ओवरराइट consoleया छाया करता है तो कहना window- अब आपके पास एक बड़ी समस्या है।
सेब सेब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.