"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > जावास्क्रिप्ट में ऑब्जेक्ट परिवर्तनशीलता

जावास्क्रिप्ट में ऑब्जेक्ट परिवर्तनशीलता

2024-08-19 को प्रकाशित
ब्राउज़ करें:911

Object Mutability in Javascript

वस्तु परिवर्तनशीलता

परिवर्तनशीलता किसी मूल्य को बदलने की क्षमता है। एक परिवर्तनशील मान को बदला जा सकता है, और एक अपरिवर्तनीय मान को नहीं बदला जा सकता। एक आम ग़लतफ़हमी यह है कि "const" कीवर्ड एक वेरिएबल को अपरिवर्तनीय बनाता है।

कॉन्स्ट

वास्तव में, "const" केवल पुनर्असाइनमेंट को रोकता है। गैर-ऑब्जेक्ट प्रकारों के लिए, मानों को केवल पुन: असाइनमेंट के माध्यम से बदला जा सकता है, इसलिए उन्हें "const" के साथ घोषित करना वास्तव में उन्हें अपरिवर्तनीय बनाता है। उदाहरण के लिए, निम्नलिखित कोड पर विचार करें:

const num = 5;
num = 7; // illegal reassignment of const variable

इस कोड में संख्या का मान बदलने का कोई तरीका नहीं है। ध्यान दें कि या -- का उपयोग करना अभी भी पुन:असाइनमेंट माना जाता है, और यदि हम उन्हें स्थिरांक के साथ घोषित चर पर उपयोग करने का प्रयास करते हैं तो यह त्रुटि संदेश में दर्शाया गया है।

const num = 5;
num  ;//illegal reassignment of constant

परिणामस्वरूप त्रुटि यह है:

Uncaught TypeError: Assignment to constant variable.

कॉन्स्ट ऑब्जेक्ट परिवर्तनशील हो सकते हैं

परिवर्तनशीलता के संबंध में वस्तुएं मौलिक रूप से भिन्न होती हैं, क्योंकि उनके मान चर के पुन: निर्धारण के बिना बदल सकते हैं। ध्यान दें कि संपत्तियों के पुनर्निर्धारण को "const" द्वारा रोका नहीं जाता है। केवल वेरिएबल नाम को पुन: असाइनमेंट से रोका गया है।

const obj = {num: 5};
obj.num = 7; //legal
obj = {num: 7}; //illegal reassignment 

ऑब्जेक्ट्स में ऐसे तरीके भी हो सकते हैं जो आंतरिक मूल्यों को बदलते हैं।

const obj = {
    num: 5,
    increment(){
        this.num  ;
    }
}
obj.increment();
console.log(obj.num); //6

किसी वस्तु को अपरिवर्तनीय बनाना

किसी वस्तु को "const" के साथ घोषित करके और object.freeze() का उपयोग करके उसे वास्तव में अपरिवर्तनीय बनाना संभव है।

const obj = {num: 5};
Object.freeze(obj);
obj.num = 7; // doesn't change
console.log(obj.num);// still 5

ध्यान दें कि यदि हम सख्त मोड का उपयोग करते हैं, तो संख्या मान को बदलने का प्रयास वास्तव में निम्न त्रुटि संदेश के साथ क्रैश का कारण बनेगा:

Cannot assign to read only property 'num'

इस ऑब्जेक्ट को अपरिवर्तनीय बनाने के लिए "const" के बिना object.freeze() का उपयोग पहले से ही पर्याप्त है। हालाँकि, यह वेरिएबल नाम को अपरिवर्तनीय नहीं बनाता है।

let obj = {num: 5};
Object.freeze(obj);
obj = {num: 5}; // new object with old name
obj.num = 7; // changes successfully
console.log(obj.num);// 7

कोड के इस संस्करण में क्या होता है कि ओबीजे को पुन: असाइन किया जाता है। फ़्रीज़() को पिछले ऑब्जेक्ट पर लागू किया गया था जिसका नाम समान था, लेकिन नया ऑब्जेक्ट कभी फ़्रीज़ नहीं हुआ था, इसलिए यह परिवर्तनशील है।

वस्तुओं को सील करना

ऐसे समय होते हैं जब आप किसी ऑब्जेक्ट में मानों को बदलने की अनुमति देना चाहते हैं, लेकिन आप गुणों को जोड़ने या हटाने की अनुमति नहीं देना चाहते हैं। इसे object.seal() का उपयोग करके प्राप्त किया जा सकता है।

let obj = {num: 5};
Object.seal(obj);
obj.num = 7; // changes
console.log(obj.num);// 7
obj.newValue = 42; //cannot add new property to sealed object
console.log(obj.newValue);//undefined
delete obj.num; //cannot delete property from sealed object
console.log(obj.num);// still exists and is 7

दानेदार नियंत्रण

पूरी वस्तु पर फ्रीजिंग और सीलिंग लागू होती है। यदि आप विशिष्ट गुणों को अपरिवर्तनीय बनाना चाहते हैं, तो इसे definProperty() या definProperties() का उपयोग करके किया जा सकता है। इन दोनों के बीच चुनाव इस बात पर निर्भर करता है कि आप एक संपत्ति को प्रभावित करना चाहते हैं या एकाधिक संपत्तियों को।

const obj = {};
Object.defineProperty(obj, 'num',{
    value: 5,
    writable: false,
    configurable: false
});
obj.num = 7; // Cannot change value because writable is false
delete obj.num; // Cannot delete because configurable is false
console.log(obj.num);//Still exists and is 5

इस उदाहरण में एक नई संपत्ति को परिभाषित किया जा रहा है, लेकिन definProperty() का उपयोग मौजूदा संपत्ति पर भी किया जा सकता है। ध्यान दें कि यदि "कॉन्फ़िगर करने योग्य" को पहले गलत पर सेट किया गया था, तो इसे सत्य में नहीं बदला जा सकता है, लेकिन यदि यह मूल रूप से सत्य था, तो इसे गलत पर सेट किया जा सकता है, क्योंकि यह परिवर्तन कॉन्फ़िगरेशन के एक प्रकार के रूप में गिना जाता है।

निष्कर्ष

ज्यादातर मामलों में, आपको यह गारंटी देने की आवश्यकता नहीं होगी कि कोई वस्तु अपरिवर्तनीय है। जब ऐसी कोई आवश्यकता उत्पन्न होती है, तो यह आम तौर पर वस्तु को फ्रीज करने के लिए पर्याप्त होता है, लेकिन ऐसी आवश्यकताएं उत्पन्न होने पर हमारे पास बेहतर नियंत्रण के लिए अतिरिक्त विकल्प होते हैं।

विज्ञप्ति वक्तव्य यह आलेख यहां पुन: प्रस्तुत किया गया है: https://dev.to/chooking/object-mutability-in-javascript-1nk4?1 यदि कोई उल्लंघन है, तो कृपया इसे हटाने के लिए [email protected] से संपर्क करें।
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3