जावास्क्रिप्ट में परिवर्तनीय और अपरिवर्तनीय
यह लेख जावास्क्रिप्ट में परिवर्तनीय और अपरिवर्तनीय अवधारणाओं को समझाता है।
YouTube Video
जावास्क्रिप्ट में परिवर्तनीय और अपरिवर्तनीय
परिवर्तनीय क्या है?
परिवर्तनीय का अर्थ है कि मान को संशोधित किया जा सकता है। ऑब्जेक्ट्स और एरेज़, जो कि संदर्भ प्रकार हैं, परिवर्तनीय डेटा संरचनाओं के विशिष्ट उदाहरण हैं।
परिवर्तनीय ऑब्जेक्ट का उदाहरण
1let person = { name: "Alice", age: 25 };
2person.age = 26;
3console.log(person); // { name: "Alice", age: 26 }
इस कोड में, person
ऑब्जेक्ट के age
प्रॉपर्टी को 25
से बदलकर 26
कर दिया गया है। क्योंकि ऑब्जेक्ट्स को संदर्भ द्वारा पास किया जाता है, person
वेरिएबल में संग्रहीत मेमोरी पता में सामग्री को संशोधित किया जाता है।
परिवर्तनीय एरे का उदाहरण
1let numbers = [1, 2, 3];
2numbers.push(4);
3console.log(numbers); // [1, 2, 3, 4]
इस कोड में, मूल एरे में एक नया तत्व 4
जोड़ने के लिए push
विधि का उपयोग किया गया है। यह मूल एरे को संशोधित करता है, जिससे यह एक परिवर्तनीय ऑपरेशन बन जाता है।
एक फ़ंक्शन में उदाहरण
1// Function to append a value to an array
2function append(arr, value) {
3 arr.push(value); // Modify the original array
4 console.log(arr);
5}
6
7let numbers = [1, 2, 3];
8append(numbers, 4);
9
10console.log(numbers); // [1, 2, 3, 4] (original array is modified)
जब किसी फ़ंक्शन के भीतर परिवर्तनीय ऑपरेशन किए जाते हैं, तो मूल एरे भी संशोधित हो जाता है।
अपरिवर्तनीय क्या है?
अपरिवर्तनीय का अर्थ है कि मान को संशोधित नहीं किया जा सकता है। मौलिक प्रकार मौलिक रूप से अपरिवर्तनीय होते हैं।
अपरिवर्तनीय मौलिक प्रकार का उदाहरण
1let str = "hello";
2str[0] = "H";
3console.log(str); // "hello"
स्ट्रिंग str
के पहले अक्षर को H
में बदलने का प्रयास विफल होता है क्योंकि स्ट्रिंग्स अपरिवर्तनीय होती हैं।
एक फ़ंक्शन में उदाहरण
1// Function to increment a number
2function increment(num) {
3 num++; // This modifies only the local copy of num
4 console.log(num);
5}
6
7let number = 10;
8increment(number);
9
10console.log(number); // 10 (original number remains unchanged)
क्योंकि संख्या अपरिवर्तनीय होती हैं, इसलिए फ़ंक्शन के अंदर किए गए ऑपरेशन मूल वेरिएबल को प्रभावित नहीं करते हैं।
एरे पर अपरिवर्तनीय ऑपरेशन
एरे परिवर्तनीय होते हैं, लेकिन मूल एरे को संशोधित करने के बजाय एक नया एरे बनाना अपरिवर्तनीय ऑपरेशन की अनुमति देता है।
1// Create an array of numbers
2let numbers = [1, 2, 3];
3
4// Create a new array by spreading the original and adding a new element
5let newNumbers = [...numbers, 4];
6
7console.log(numbers); // [1, 2, 3] (original array is unchanged)
8console.log(newNumbers); // [1, 2, 3, 4] (new array with an added element)
यहां, स्प्रेड सिंटैक्स (...
) का इस्तेमाल एक नया ऐरे newNumbers
बनाने के लिए किया गया है। क्योंकि मूल numbers
ऐरे को संशोधित नहीं किया गया है, यह एक अपरिवर्तनीय ऑपरेशन है।
अपरिवर्तनीय डेटा संरचनाओं के उपयोग के लाभ
बेहतर पूर्वानुमेयता
क्योंकि अपरिवर्तनीय डेटा को बदला नहीं जा सकता, अप्रत्याशित संशोधनों की संभावना कम होती है, जिससे बग के जोखिम को कम किया जा सकता है।
अपरिवर्तनीयता पर आधारित लाइब्रेरीज़ के साथ संगतता
React
और Redux
जैसी लाइब्रेरीज़ को अक्सर अपरिवर्तनीय डेटा को ध्यान में रखकर डिज़ाइन किया जाता है, जिससे सही उपयोग पर स्टेट मैनेजमेंट सरल हो जाता है।
Object.freeze
के साथ वस्तुओं को अपरिवर्तनीय बनाना
Object.freeze
का इस्तेमाल किसी वस्तु में संशोधन को रोकने के लिए किया जा सकता है।
1// Create a frozen object (properties cannot be modified)
2const person = Object.freeze({ name: "Alice", age: 25 });
3
4// Attempt to modify a property (ignored in non-strict mode, error in strict mode)
5person.age = 26;
6
7console.log(person); // { name: "Alice", age: 25 }
हालाँकि, Object.freeze
एक शैलो फ्रीज करता है, जिसका मतलब है कि नेस्टेड वस्तुओं के गुण अभी भी संशोधित किए जा सकते हैं।
1// Create a frozen object with a nested object
2const user = Object.freeze({ profile: { name: "Bob" } });
3
4// Attempt to modify a nested property (this works because Object.freeze() is shallow)
5user.profile.name = "Charlie";
6
7console.log(user.profile.name); // "Charlie" (nested object is still mutable)
एक पूरी तरह से अपरिवर्तनीय वस्तु बनाने के लिए, एक डीप फ्रीज की आवश्यकता होती है।
1// Function to deeply freeze an object, making all nested objects immutable
2function deepFreeze(obj) {
3 Object.keys(obj).forEach(key => {
4 if (typeof obj[key] === "object" && obj[key] !== null) {
5 deepFreeze(obj[key]); // Recursively freeze nested objects
6 }
7 });
8 return Object.freeze(obj); // Freeze the top-level object
9}
10
11// Create a deeply frozen object
12const user = deepFreeze({ profile: { name: "Bob" } });
13
14// Attempt to modify a nested property (ignored)
15user.profile.name = "Charlie";
16
17console.log(user.profile.name); // "Bob" (unchanged due to deep freeze)
सारांश
- परिवर्तनीय डेटा को संशोधित किया जा सकता है, जिसमें वस्तुएं और ऐरे शामिल हैं।
- अपरिवर्तनीय डेटा को संशोधित नहीं किया जा सकता, जिसमें प्रिमिटिव प्रकार जैसे कि स्ट्रिंग्स और नंबर शामिल हैं।
- स्प्रेड सिंटैक्स या
map
का उपयोग अपरिवर्तनीय डेटा ऑपरेशन्स में सक्षम बनाता है।। Object.freeze
औरdeepFreeze
का इस्तेमाल वस्तुओं में संशोधनों को रोकने के लिए किया जा सकता है।- अपरिवर्तनीय डेटा का उपयोग अधिक पूर्वानुमेय और त्रुटि-प्रवणता रहित कोड के लिए अनुमति देता है।
अपरिवर्तनीय डिज़ाइन कोड की सुरक्षा और पठनीयता को बढ़ाता है, इसलिए इसका सही तरीके से उपयोग करें!
आप हमारे YouTube चैनल पर Visual Studio Code का उपयोग करके ऊपर दिए गए लेख के साथ आगे बढ़ सकते हैं। कृपया YouTube चैनल को भी देखें।