Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Javascript

इसका क्या अर्थ है कि जावास्क्रिप्ट में आदिम मूल्य अपरिवर्तनीय हैं?

जावास्क्रिप्ट में, आपने अक्सर सुना होगा कि गैर-आदिम मूल्यों के विपरीत आदिम मान अपरिवर्तनीय होते हैं, जो हैं परिवर्तनशील इन मान प्रकारों के बीच अंतर को समझना महत्वपूर्ण है (जिसे डेटा प्रकार . भी कहा जाता है) ) क्योंकि यह आपको सड़क पर होने वाले सिरदर्द से बचाएगा।

आदिम मूल्य ऐसी चीजें हैं:

  • संख्या
  • स्ट्रिंग्स
  • बूलियन

गैर-आदिम मान हैं:

  • वस्तुएं
  • कार्य

उत्परिवर्तनीय का अर्थ है कि यह कर सकता है बदला जा सकता है।

अपरिवर्तनीय का अर्थ है यह नहीं बदला जा सकता है।

गैर-आदिम मान परिवर्तनशील होते हैं

निम्नलिखित लोगों की एक सूची (सरणी) है जो एक चर को सौंपे गए हैं:

let peopleList = ['Arnold', 'Linda', 'Sylvester', 'Dolph']

अब मैं म्यूट करना . चाहता हूं मेरी सूची। म्यूटेट का सीधा सा मतलब है बदलें। मैं अर्नोल्ड को जीन-क्लाउड के साथ स्वैप करना चाहता हूं, और परिणाम का प्रिंट आउट लेना चाहता हूं:

let peopleList = ['Arnold', 'Linda', 'Sylvester', 'Dolph']

peopleList[0] = 'Jean-Claude'

console.log(peopleList)

वो कर गया काम! हमने अभी मौजूदा मूल्य पर एक उत्परिवर्तन किया है। इस मामले में, मौजूदा मान एक सरणी (सूची) था, या अधिक विशेष रूप से, एक सरणी वस्तु

जावास्क्रिप्ट में, गैर-आदिम मान परिवर्तनशील (परिवर्तनीय) होते हैं।

आदिम मान अपरिवर्तनीय होते हैं

निम्नलिखित एक टेक्स्ट (स्ट्रिंग) मान है जो एक वेरिएबल को असाइन किया जाता है:

let person = 'Ernold'

बकवास, दुर्भाग्य से, हमने अर्नोल्ड को उसके नाम के पहले अक्षर में ए के बजाय ई का उपयोग करके गलत लिखा। आइए इसे जल्दी से बदलें और परिणाम का प्रिंट आउट लें:

let person = 'Ernold'

person[0] = 'A' 

console.log(person) // output: Ernold

रुको क्या? यह "अर्नोल्ड" का प्रिंट आउट क्यों लेता है? क्या हमने ई को ए के साथ स्वैप नहीं किया था !?

नहीं, क्योंकि हम जिस मान को बदलने की कोशिश कर रहे हैं वह एक स्ट्रिंग, . है जो एक आदिम मूल्य . है - और सभी आदिम मूल्य अपरिवर्तनीय (अपरिवर्तनीय) हैं।

केवल गैर-आदिम मान (वस्तुएं और कार्य) परिवर्तनशील होते हैं।

भ्रमित?

अपनी जावास्क्रिप्ट सीखने की यात्रा की शुरुआत में इस सामग्री के बारे में भ्रमित होना पूरी तरह से सामान्य है क्योंकि सतह पर ऊपर दिए गए उदाहरण समान दिखते हैं और यहां तक ​​​​कि व्यवहार भी करते हैं — कुछ में स्थितियां।

आइए हमारे सरणी . से पहले नाम का प्रिंट आउट लें पहले से:

let peopleList = ['Arnold', 'Linda', 'Sylvester', 'Dolph']

console.log(peopleList[0]) // output: "Arnold"

कोई आश्चर्य की बात नहीं है, यह "Arnold" प्रिंट करता है .

आइए अब हमारे स्ट्रिंग . के पहले अक्षर का प्रिंट आउट लें पहले से (गलत वर्तनी नाम):

let person = 'Ernold'

console.log(person[0]) // output: ??

तुम्हें क्या लगता है क्या होगा?

...

...

वो कर गया काम! यह "E" . प्रिंट करता है !

क्या आपको उम्मीद थी कि उपरोक्त काम नहीं करेगा?

किसी भी तरह, यहां महत्वपूर्ण सबक यह है कि आप पहुंच कर सकते हैं आप गैर-आदिम मूल्यों तक कैसे पहुंचते हैं, उसी तरह से एक आदिम मूल्य, लेकिन आप इसे बदल (म्यूट) नहीं कर सकते। यह बड़ा अंतर है (एक्सेस बनाम म्यूटेट)।

जावास्क्रिप्ट में, आदिम मान केवल पढ़ने के लिए, . हैं जबकि गैर-आदिम मान (ऑब्जेक्ट/सरणी, कार्य) दोनों पढ़ें और लिखें।

इसलिए हम Arnold से अपने सरणी के पहले आइटम मान को बदल सकते हैं (म्यूटेट) कर सकते हैं करने के लिए Jean-Claude पहले, लेकिन हम "Arnold" . से एक साधारण वर्तनी त्रुटि को ठीक नहीं कर सकते करने के लिए "Arnold" — क्योंकि यह एक स्ट्रिंग है, और तार/आदिम मान अपरिवर्तनीय हैं।

चर बनाम मान

(मुझे पता है कि आप में से कुछ लोग क्या सोच रहे हैं)

भले ही हमने अभी यह निष्कर्ष निकाला है कि आदिम मूल्य अपरिवर्तनीय हैं, फिर भी मैं "अर्नोल्ड" की वर्तनी की गलती को ठीक करने के लिए दृढ़ हूं। आइए कुछ नया करने की कोशिश करें!

निम्नलिखित कोड पर एक नज़र डालें (इसे ध्यान से पढ़ें):

let person = 'Ernold'

person = 'Arnold'

console.log(person) // output: ??

स्ट्रिंग्स जैसे आदिम मूल्यों के बारे में आपने जो सीखा है, उसे ध्यान में रखते हुए, क्या आपको लगता है कि उपरोक्त Arnold को प्रिंट करेगा , हां या नहीं?

...

(इसके बारे में सोचें)

...

यह Arnold . का प्रिंट आउट लेता है !

आप में से कुछ लोग पहले से ही जानते हैं कि क्यों, लेकिन अगर आपने नहीं किया, तो यह सामान्य है, आप एक पल में "आह पल" का अनुभव करेंगे। निम्नलिखित पैराग्राफ को ध्यान से पढ़ें।

उपरोक्त कोड काम करता है क्योंकि हम स्ट्रिंग मान को बदल नहीं रहे हैं, हम इसे छू भी नहीं रहे हैं। इसके बजाय, हम एक नया . असाइन कर रहे हैं स्ट्रिंग मान जिसे 'Arnold' . कहा जाता है person . को चर इसलिए यह अब 'Arnold' . का संदर्भ नहीं देता (इंगित करता है) स्ट्रिंग वैल्यू।

आदिम मान नहीं बदल सकते, लेकिन चर बदल सकते हैं!

चर मान नहीं हैं, इसलिए परिवर्तनशीलता या अपरिवर्तनीयता के नियम समान नहीं हैं। चर केवल मानों की ओर इशारा करते हैं।

हमने पहले वाले स्ट्रिंग मान को कभी नहीं छुआ 'Arnold' सीधे तौर पर, हमने अभी-अभी अपने person . को बताया 'Arnold' . नामक एक अन्य स्ट्रिंग को इंगित करने के लिए चर और फिर इस्तेमाल किया console.log() परिणाम का प्रिंट आउट लेने के लिए।

आप में से कुछ लोग सोच सकते हैं कि मैं यहाँ मरे हुए घोड़े की पिटाई कर रहा हूँ, लेकिन यह महत्वपूर्ण है कि आपको इस बात का अहसास हो कि जावास्क्रिप्ट कैसे काम करता है। दोहराव आपका मित्र है।

नोट:इस पूरे ट्यूटोरियल में हमने जिस प्रकार के वेरिएबल का उपयोग किया है, वह कीवर्ड प्रकार let . का है - जो कि परिवर्तनशील है, जैसा कि आपने अभी पिछले कोड उदाहरण में देखा था। अगर हम const . का उपयोग कर रहे होते परिवर्तनशील, स्थिति अलग होती - लेकिन मैं उस विषय को एक अलग ट्यूटोरियल के लिए सहेज कर रखूंगा।

संक्षेप में:

जावास्क्रिप्ट में:

  • गैर-आदिम मानों को संदर्भित किया जा सकता है, एक्सेस किया जा सकता है - और उत्परिवर्तित किया जा सकता है।
  • आदिम मानों को संदर्भित किया जा सकता है, एक्सेस किया जा सकता है — लेकिन म्यूटेट नहीं किया जा सकता है।
  • चर और मान दो अलग-अलग चीजें हैं, अलग-अलग नियम लागू होते हैं।

  1. जावास्क्रिप्ट में वादे क्या हैं?

    वादे हमें अतुल्यकालिक संचालन करने की अनुमति देते हैं जहां मूल्य उन्नत में ज्ञात नहीं है जब वादा बनाया जा रहा था। एक वादे में तीन राज्य लंबित, पूरे और अस्वीकृत हो सकते हैं। जावास्क्रिप्ट में वादों के लिए कोड निम्नलिखित है - उदाहरण <!DOCTYPE html> <html lang="en"> <head> &

  1. जावास्क्रिप्ट में फंक्शन एक्सप्रेशन क्या हैं?

    फंक्शन एक्सप्रेशन हमें फंक्शन को एक वेरिएबल में स्टोर करने की अनुमति देता है जिसे बाद में वेरिएबल नाम का उपयोग करके लागू किया जा सकता है। उन्हें भी सामान्य फ़ंक्शन घोषणा की तरह फहराया नहीं जाता है, इसलिए उन्हें परिभाषित होने से पहले नहीं बुलाया जा सकता है। जावास्क्रिप्ट में फंक्शन एक्सप्रेशन को लाग

  1. जावास्क्रिप्ट में क्लोजर क्या हैं?

    जावास्क्रिप्ट में क्लोजर हमें बाहरी फ़ंक्शन के निष्पादित होने और वापस आने के बाद भी आंतरिक फ़ंक्शन से बाहरी फ़ंक्शन स्कोप तक पहुंचने की अनुमति देता है। इसका मतलब है कि आंतरिक फ़ंक्शन के पास हमेशा बाहरी फ़ंक्शन चर तक पहुंच होगी। जावास्क्रिप्ट में क्लोजर के लिए कोड निम्नलिखित है - उदाहरण <!DOCTYPE