Cover Image for इस लेख के साथ जावास्क्रिप्ट स्ट्रिंग्स के बारे में अपने ज्ञान को बढ़ाएँ!
[JavaScript][Beginners]
20 अप्रैल 2024

इस लेख के साथ जावास्क्रिप्ट स्ट्रिंग्स के बारे में अपने ज्ञान को बढ़ाएँ!

जावास्क्रिप्ट में स्ट्रिंग्स कैसे काम करती हैं, इस पर एक संक्षिप्त लेख। यह स्ट्रिंग्स की अपरिवर्तनीयता, तुलना तंत्र, और स्ट्रिंग्स के लिए मेमोरी आवंटन अनुकूलन को कवर करता है।

आइए कुछ प्रश्नों के साथ शुरू करें: यह कोड क्या आउटपुट करेगा?

const str = "Hello";
str[2] = "a";
console.log(str);

और अगर हम const को let से बदल दें तो क्या होगा?

let str = "Hello";
str[2] = "a";
console.log(str);

इस कोड को अपने ब्राउज़र कंसोल में दर्ज करें और देखें कि क्या होता है।

जावास्क्रिप्ट में, स्ट्रिंग्स अपरिवर्तनीय होती हैं। इसका मतलब है कि चाहे वेरिएबल let या const के साथ घोषित किया गया हो, मान नहीं बदलेगा, और दोनों मामलों में, "Hello" आउटपुट होगा।

लेकिन अगर हम स्ट्रिंग संयोजन के साथ असाइनमेंट ऑपरेटर जोड़ें:

const str = "Hello";
str += " World";
console.log(str);

यह कोड TypeError: Assignment to constant variable का परिणाम देगा क्योंकि हमने स्ट्रिंग को const के रूप में घोषित किया है। आइए इसे let में बदलें:

let str = "Hello";
str += " World";
console.log(str);

जावास्क्रिप्ट में, जब एक स्ट्रिंग से दूसरे स्ट्रिंग को मान सौंपा जाता है, तो स्ट्रिंग्स कॉपी की जाती हैं। इसलिए, यह कोड "Hello World" आउटपुट करेगा। लेख के अंत में, हम चरण दर चरण समझाएँगे कि ऐसा कोड कैसे काम करता है।

आइए स्ट्रिंग कॉपी करने में गहराई से जाएँ। यह कोड क्या आउटपुट करेगा और क्यों?

const str1 = "Hello";
const str2 = str1;

console.log(str1 === str2);

जावास्क्रिप्ट में एक स्ट्रिंग की कॉपी करते समय, स्ट्रिंग ऑब्जेक्ट के लिए एक नया संदर्भ बनाया जाता है, लेकिन स्ट्रिंग स्वयं मेमोरी में डुप्लिकेट नहीं होती है। इसलिए, जब str1 === str2 की तुलना की जाती है, तो true आउटपुट होगा। यहाँ एक विस्तृत विवरण है:

  • स्ट्रिंग 'Hello' बनाना: स्ट्रिंग 'Hello' को स्टोर करने के लिए मेमोरी आवंटन।
  • दूसरे वेरिएबल को मान सौंपना: वेरिएबल str2 को मेमोरी में वेरिएबल str1 के समान स्ट्रिंग ऑब्जेक्ट के लिए एक संदर्भ मिलता है।
  • वेरिएबल तुलना: जब str1 === str2 की तुलना की जाती है, तो जावास्क्रिप्ट पहले संदर्भ मानों की तुलना करता है, न कि स्वयं स्ट्रिंग्स की। चूंकि दोनों वेरिएबल्स मेमोरी में एक ही स्ट्रिंग ऑब्जेक्ट का संदर्भ देते हैं, तुलना true लौटाएगी।

लेकिन अगर हम स्ट्रिंग की कॉपी न करें और इसके बजाय पहले वाले के समान मान के साथ एक नया बनाएं तो क्या होगा? यह कोड क्या आउटपुट करेगा, क्यों, और यह कैसे काम करता है?

const str1 = "Hello";
const str2 = "Hello";

console.log(str1 === str2);
  • जब const str1 = 'Hello' घोषित किया जाता है, तो स्ट्रिंग 'Hello' को स्टोर करने के लिए मेमोरी आवंटित की जाती है।
  • फिर, जब const str2 = 'Hello' घोषित किया जाता है, तो जावास्क्रिप्ट मेमोरी उपयोग को अनुकूलित करता है और दोनों वेरिएबल्स के लिए केवल एक स्ट्रिंग ऑब्जेक्ट बनाता है। स्ट्रिंग 'Hello' के लिए नई मेमोरी आवंटित करने के बजाय, जावास्क्रिप्ट पता लगाता है कि स्ट्रिंग 'Hello' पहले से ही मेमोरी में मौजूद है (जैसा कि str1 घोषित करने के परिणामस्वरूप) और वेरिएबल str2 के लिए इस समान स्ट्रिंग के लिए केवल एक संदर्भ बनाता है।
  • जब console.log(str1 === str2) निष्पादित किया जाता है, तो वेरिएबल्स str1 और str2 के बीच तुलना की जाती है। चूंकि दोनों वेरिएबल्स मेमोरी में एक ही स्ट्रिंग ऑब्जेक्ट का संदर्भ देते हैं, तुलना true लौटाएगी।

अब, आइए स्ट्रिंग्स के संयोजन को अधिक विस्तार से देखें:

const str1 = "Hello";
const str2 = str1 + "2";

console.log(str1 === str2);
  • जब const str1 = 'Hello' घोषित किया जाता है, तो स्ट्रिंग 'Hello' के लिए मेमोरी आवंटित की जाती है।
  • जब const str2 = str1 + '2' घोषित किया जाता है, तो स्ट्रिंग संयोजन होता है। जावास्क्रिप्ट str1 की सामग्री (जिसमें 'Hello' होता है) और स्ट्रिंग '2' को मिलाकर एक नई स्ट्रिंग बनाता है। चूंकि जावास्क्रिप्ट में स्ट्रिंग्स अपरिवर्तनीय होती हैं, संयोजन परिणाम के लिए एक नया स्ट्रिंग ऑब्जेक्ट बनाया जाता है, इस मामले में 'Hello2'
  • जब console.log(str1 === str2) निष्पादित किया जाता है, चूंकि str1 में 'Hello' होता है और str2 में 'Hello2' होता है, वे मेमोरी में विभिन्न स्ट्रिंग ऑब्जेक्ट्स की ओर इशारा करते हैं, और तुलना false लौटाएगी।

अगला पढ़ें

हमारे समुदाय से जुड़ें