दिलचस्प पोस्ट
एस 3 के माध्यम से अमेज़ॅन क्लाउडफ़्रॉक्ट से जीज़िपेड सीएसएस और जावास्क्रिप्ट की सेवा जावास्क्रिप्ट में एक विस्मयादिबोधक बिंदु क्या है? कैसे iPhone में NSString से एचटीएमएल टैग को दूर करने के लिए? Django में एक-से-कई रिश्ते को कैसे व्यक्त किया जाए नियंत्रण के नियमित प्रवाह के रूप में अपवाद का उपयोग क्यों नहीं करें? पायथन डेकोरेटर फ़ंक्शन भूल जाते हैं कि यह एक क्लास से संबंधित है 2 सी # प्रक्रियाओं के बीच अंतर-प्रक्रिया संचार की सबसे सरल विधि क्या है? JQuery में HTML दस्तावेज़ का हिस्सा निकालें PHP में JSONP Resultset निकालें उपयोगकर्ता नाम के माध्यम से फ़ाइल का नाम कैसे प्राप्त करें <input type = "file" />? स्मृति-मैप किए गए फ़ाइलों के फायदे क्या हैं? पायथन – एक्सपोनेंट में अंकों की संख्या UIWebView didFinish लोड हो रहा है कई बार आग लगाना आईओएस शुरू पृष्ठभूमि थ्रेड JSF प्रदान किए गए HTML आउटपुट के बजाय खाली / कच्चे एक्सएचटीएमएल / एक्सएमएल / ईएल स्रोत के साथ रिक्त / अनपर्स पृष्ठ देता है

आदिम मूल्य बनाम संदर्भ मूल्य

मैं "वेब डेवलपर के लिए व्यावसायिक जावास्क्रिप्ट" नामक एक किताब पढ़ता हूं और यह कहता है: "वेरिएबल को संदर्भ मान या आदिम मान से सौंपा गया है। संदर्भ मान स्मृति में संग्रहीत ऑब्जेक्ट हैं"। और फिर यह कुछ भी नहीं कहता है कि आदिम मान कैसे संग्रहीत है। इसलिए मुझे लगता है कि यह स्मृति में संग्रहीत नहीं है इसके आधार पर, जब मुझे इस तरह एक स्क्रिप्ट है:

var foo = 123; 

जावास्क्रिप्ट को बाद में इस्तेमाल करने के लिए foo चर को कैसे स्मरण करता है?

Solutions Collecting From Web of "आदिम मूल्य बनाम संदर्भ मूल्य"

एक variable दो मान प्रकारों में से एक हो सकता है: primitive values या reference values

  • Primitive values डेटा है जो स्टैक पर संग्रहीत हैं।
  • Primitive value उस स्थान पर सीधे जमा हो जाता है जो चर तक पहुंचता है।
  • Reference values ऑब्जेक्ट हैं जो ढेर में संग्रहीत हैं।
  • वेरिएबल स्थान में संग्रहीत Reference value मेमोरी में एक स्थान के लिए सूचक है जहां ऑब्जेक्ट को संग्रहीत किया जाता है।
  • आदिम प्रकारों में Undefined , Null , Boolean , Number , या String

मूल बातें:

ऑब्जेक्ट गुणों का एकत्रीकरण हैं एक संपत्ति एक object या एक primitive संदर्भ कर सकती है। Primitives are values , उनके पास कोई गुण नहीं है

अपडेट किया गया:

जावास्क्रिप्ट में 6 आदिम डेटा प्रकार हैं: स्ट्रिंग , नंबर , बूलियन , रिक्त , अपरिभाषित , प्रतीक (ES6 में नया)। अशक्त और अपरिभाषित के अपवाद के साथ, सभी प्राइमिटिव मानों में ऑब्जेक्ट समकक्ष हैं, जो आदिम मानों के आस-पास लपेटते हैं, उदाहरण के लिए स्ट्रिंग ऑब्जेक्ट एक स्ट्रिंग आदिम के आसपास लपेटता है। सभी प्राइमेटिव अपरिवर्तनीय हैं

ठीक है, अपने वेरिएबल को कागज के एक टुकड़े होने की कल्पना करो – एक चिपचिपा नोट।

नोट 1: एक चर एक चिपचिपा नोट है

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

नोट 2: आपके पास चिपचिपा नोट्स की एक अंतहीन आपूर्ति है, जो छोटी मात्रा में जानकारी संग्रहीत करता है।

अच्छा, आप अपने चिपचिपा नोट पर क्या लिख ​​सकते हैं? मैं लिख सकता हूँ:

  1. हाँ या नहीं (एक बूलियन )
  2. मेरी उम्र (एक संख्या )
  3. मेरा नाम (एक स्ट्रिंग )
  4. बिल्कुल भी नहीं ( अपरिभाषित )
  5. एक डूडल या कुछ और जो मेरे लिए कुछ भी नहीं है ( नल )

इसलिए हम अपने चिपचिपा नोटों पर सरल चीजें (हम बेहोश हो सकते हैं और उन्हें प्राचीन चीज़ों को कॉल कर सकते हैं) लिख सकते हैं।

नोट 3: आप अपने चिपचिपा नोट्स पर आदिम चीजें लिख सकते हैं।

तो कहते हैं कि मैं एक चिपचिपा नोट पर 30 लिखता हूं कि छोटी सी पार्टी के लिए 30 पनीर पनीर खरीदने के लिए खुद को याद दिलाने के लिए मैं आज रात अपने घर पर फेंक रहा हूं (मेरे पास बहुत कम दोस्त हैं)।

जब मैं फ्रिज पर अपना चिपचिपा नोट रखता हूं तो मुझे लगता है कि मेरी पत्नी ने फ्रिज पर एक और चिपचिपा नोट रखा है जो 30 भी कहता है (मुझे याद दिलाना है कि उसका इस महीने 30 तारीख को है)।

प्रश्न: क्या दोनों चिपचिपा नोट्स एक ही जानकारी व्यक्त करते हैं?

ए: हाँ, वे दोनों कहते हैं 30 । हमें नहीं पता है कि यह 30 चीज़ों का पनीर या महीने के 30 वें दिन है, और स्पष्ट रूप से हमें परवाह नहीं है। किसी ऐसे व्यक्ति के लिए जो किसी भी बेहतर नहीं जानता था, वह सब एक ही है

 var slicesOfCheese = 30; var wifesBirthdate = 30; alert(slicesOfCheese === wifesBirthdate); // true 

नोट 4: दो चिपचिपा नोट्स जिन पर एक ही बात लिखी है, वे समान जानकारी देते हैं, भले ही वे दो अलग चिपचिपा नोट हैं।

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

इसलिए मैं अपने फ्रिज में जाता हूं और मेरी चिपचिपा नोट पर 30 को मिटा देता हूं (मेरी पत्नी की चिपचिपा नोट नहीं है – वह उसे बहुत गुस्सा करेगी) और इसे 20 बनाओ

नोट 5: आप चिपचिपा नोट पर जो लिखा है उसे मिटा सकते हैं और कुछ और लिख सकते हैं

प्रश्न: यह सब ठीक है और ठीक है, लेकिन क्या हुआ अगर मेरी पत्नी मुझे कुछ पनीर पाने के लिए बाहर ले जाने के लिए किराने का सामान की सूची लिखना चाहती थी क्या उसे प्रत्येक आइटम के लिए एक चिपचिपा नोट लिखने की ज़रूरत है?

ए: नहीं, वह कागज की एक लंबी सूची लेती है और उस कागज पर किराने का सामान लिखती है। तब वह एक चिपचिपा नोट लिखकर कहती है कि किराने का सामान कहां से मिल सकता है।

तो यहाँ क्या हो रहा है?

  1. किराने का सामान की एक सूची स्पष्ट रूप से सरल नहीं है (एआरएम … आदिम ) डेटा
  2. मेरी पत्नी ने इसे कागज के एक लंबे टुकड़े पर लिखा।
  3. उसने एक चिपचिपा नोट में इसे कहां लिखा था।

हनी, किराने का सामान आपके कीबोर्ड के नीचे है I

संक्षेप में दुहराना:

  1. वास्तविक वस्तु (किराने का सामान) मेरे कीबोर्ड के अंतर्गत है
  2. चिपचिपा नोट मुझे कहां कहता है (ऑब्जेक्ट का पता)

नोट 6: संदर्भ मूल्य ऑब्जेक्ट्स के संदर्भ हैं (पते जहां वे पाएंगे)।

प्रश्न: हम कैसे जानते हैं कि दो चिपचिपा नोट्स एक ही बात कहां हैं? कहो मेरी पत्नी ने एक और किराने की सूची बनाई है, अगर मैं पहली बार ग़लती की और इसके लिए एक अन्य चिपचिपा नोट लिखा। दोनों सूचियों में एक ही बात है, लेकिन चिपचिपा नोट्स एक ही बात कहते हैं?

ए: नहीं। पहली चिपचिपा नोट हमें बताता है कि पहली सूची कहां से मिलनी चाहिए। दूसरा, हमें बताता है कि दूसरी सूची कहां से मिलनी चाहिए। इससे कोई फर्क नहीं पड़ता कि दो सूचियों में वही बात है वे दो अलग-अलग सूचियां हैं

 var groceryList1 = ["1 dozen apples", "2 loaves of bread", "3 bottles of milk"]; var groceryList2 = ["1 dozen apples", "2 loaves of bread", "3 bottles of milk"]; alert(groceryList1 === groceryList2); // false 

नोट 7: दो चिपचिपा नोट्स एक ही जानकारी केवल अगर वे एक ही वस्तु को संदर्भित व्यक्त करते हैं।

इसका मतलब यह है कि अगर मेरी पत्नी ने मुझे याद दिलाया कि किराने की सूची कहां है, तो दो चिपचिपा नोट्स में एक ही सूचना होती है। तो यह:

हनी, किराने का सामान आपके कीबोर्ड के नीचे है I

इसमें समान जानकारी शामिल है:

यह भूल न करें कि किराने का सामान आपके कीबोर्ड के अंतर्गत है।

प्रोग्रामिंग शब्दों में:

 var groceryList1 = ["1 dozen apples", "2 loaves of bread", "3 bottles of milk"]; var groceryList2 = groceryList1; alert(groceryList1 === groceryList2); // true 

तो यह है कि आपको जावास्क्रिप्ट में पुरातन और संदर्भ के बारे में जानने की आवश्यकता है। ढेर और गतिशील स्मृति आवंटन जैसी चीजों में आने की कोई आवश्यकता नहीं है यदि आप सी / सी ++ में प्रोग्रामिंग कर रहे हैं तो यह महत्वपूर्ण है

1 संपादित करें: ओह, और महत्वपूर्ण बात यह है कि जब आप अपने चारों ओर व्हेरिएबल्स पास करते हैं, तो मूल रूप से मूल्यों और संदर्भ मानों के संदर्भ से मूल रूप से गुजरते हैं।

यह सिर्फ यह कहने का एक विस्तृत तरीका है कि आप एक चिपचिपा नोट पर दूसरे को लिखे गए सभी चीजों की प्रतिलिपि बना रहे हैं (यह कोई फर्क नहीं पड़ता कि आप एक आदिम मान या कोई संदर्भ कॉपी कर रहे हैं)।

संदर्भों की प्रतिलिपि करते समय, वस्तु संदर्भित नहीं होती है (उदाहरण के लिए मेरी पत्नी की किराने की सूची हमेशा अपने कीबोर्ड के तहत रहती है, लेकिन मैं चिपचिपा नोट ले सकता हूं जो मैंने कहीं भी कॉपी किया था – मूल चिपचिपा नोट अभी भी फ्रिज पर होगा)।

2 संपादित करें: टिप्पणी के जवाब में @ लायकवीट द्वारा पोस्ट किया गया:

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

निम्नलिखित सी प्रोग्राम पर विचार करें:

 #include <stdio.h> int main() { int a = 10; int b = 20; int c = a + b; printf("%d", c); return 0; } 

जब हम इस प्रोग्राम को संकलित करते हैं तो हमें निष्पादन योग्य फ़ाइल मिलती है। निष्पादन योग्य फ़ाइल को कई सेगमेंट (या अनुभाग) में विभाजित किया गया है। इन खंडों में स्टैक सेगमेंट, कोड सेगमेंट, डेटा सेगमेंट, अतिरिक्त सेगमेंट आदि शामिल हैं।

  1. स्टैक सेगमेंट का उपयोग प्रोग्राम की स्थिति को संग्रहीत करने के लिए किया जाता है जब फ़ंक्शन या इंटरप्ट हैंडलर को कहा जाता है। उदाहरण के लिए जब फ़ंक्शन फ़ंक्शन को कॉल करता है तो फ़ंक्शन की स्थिति f (उस समय के रजिस्टरों में सभी मान) एक स्टैक में सहेजे जाते हैं। जब g f को नियंत्रण देता है तो ये मान बहाल होते हैं।
  2. कोड खंड प्रोसेसर द्वारा निष्पादित किए जाने वाले वास्तविक कोड को धारण करता है। इसमें निर्देशों का एक गुच्छा होता है जिसमें प्रोसेसर को add eax, ebx करना होगा जैसे add eax, ebx (जहां add eax, ebx है, और eax और ebx हैं) हैं। यह निर्देश रजिस्टरों की eax और ebx की सामग्री को जोड़ता है और परिणाम को रजिस्टर eax में स्टोर करता है।
  3. डेटा सेगमेंट को चर के लिए स्थान आरक्षित करने के लिए उपयोग किया जाता है उदाहरण के लिए उपरोक्त कार्यक्रम में हमें पूर्णांक a , b और c लिए स्थान आरक्षित करना होगा। इसके अलावा हमें स्ट्रिंग निरंतर "%d" लिए स्थान आरक्षित करने की आवश्यकता है। इस प्रकार आरक्षित चर को स्मृति में एक निश्चित पता (लिंक और लोड करने के बाद) है।
  4. इन सभी के अतिरिक्त आप ऑपरेटिंग सिस्टम द्वारा अतिरिक्त स्थान का एक छोटा सा भी दे सकते हैं। इसे ढेर कहा जाता है किसी भी अतिरिक्त मेमोरी को आपको इस स्थान से आवंटित किया गया है। इस तरह से आवंटित मेमोरी को डायनामिक मेमोरी कहा जाता है।

चलो गतिशील स्मृति के साथ एक कार्यक्रम देखें:

 #include <stdio.h> #include <malloc.h> int main() { int * a = malloc(3 * sizeof(int)); a[0] = 3; a[1] = 5; a[2] = 7; printf("a: %d\nb: %d\nc: %d\n", a[0], a[1], a[2]); return 0; } 

क्योंकि हम गतिशील रूप से स्मृति आवंटित करना चाहते हैं, हमें संकेतक का उपयोग करने की आवश्यकता है। इसका कारण यह है कि हम एक ही वैरिएबल का प्रयोग एक मनमाना स्मृति स्थान (हर बार जरूरी नहीं कि एक ही मेमोरी स्थान) को इंगित करने के लिए करना चाहते हैं।

तो हम एक int पॉइंटर ( int * ) बनाते हैं जो कि a a लिए स्थान डेटा खंड से आवंटित किया गया है (अर्थात यह गतिशील नहीं है)। फिर हम malloc को 3 इंटिजर्स के लिए ढेर से संरेखित स्थान आवंटित करने के लिए कहते हैं। पहले int मेमोरी पता को वापस और पॉइंटर में संग्रहीत किया जाता a

प्रश्न: हमने क्या सीखा?

ए: सभी चर के लिए निश्चित राशि का आवंटन आवंटित किया गया है। प्रत्येक चर में एक निश्चित पता है। हम अतिरिक्त मेमोरी को ढेर से भी आवंटित कर सकते हैं और इस अतिरिक्त मेमोरी का पता सूचक में रख सकते हैं। इसे एक गतिशील स्मृति योजना कहा जाता है

संकल्पनात्मक रूप से यह चिपचिपा नोट्स वाले चर के बारे में समझाया गया है। सभी चर (पॉइंटर्स सहित चिपचिपा नोट्स हैं) हालांकि संकेतक विशेष होते हैं क्योंकि वे स्मृति स्थान का संदर्भ देते हैं (जो जावास्क्रिप्ट में ऑब्जेक्ट को संदर्भित करना है)।

हालांकि यह समानताएं समाप्त होती है। ये अंतर हैं:

  1. सी में सब कुछ मूल्य से पारित किया जाता है (पॉइंटर्स में पते सहित) किसी संदर्भ को पास करने के लिए आपको संकेतक के माध्यम से indirection का उपयोग करने की आवश्यकता है। जावास्क्रिप्ट केवल मूल्य द्वारा पुरातनताएं पास करता है उत्तीर्ण संदर्भ इंजन द्वारा पारदर्शी ढंग से संभाला जाता है और यह किसी भी अन्य चर को पारित करने की तरह है।
  2. सी में आप एक प्राथमिक डेटा प्रकार जैसे int बना सकते हैं। जावास्क्रिप्ट में आप किसी आदिम मूल्य जैसे संदर्भ number को नहीं बना सकते। सभी प्राइमिटिव हमेशा मूल्य द्वारा संग्रहीत किए जाते हैं
  3. सी में आप पॉइंटर्स पर विभिन्न ऑपरेशन कर सकते हैं इसे पॉइंटर अंकगणित कहा जाता है। जावास्क्रिप्ट में पॉइंटर्स नहीं है इसमें केवल संदर्भ हैं इस प्रकार आप किसी भी सूचक अंकगणितीय नहीं कर सकते।

इन तीनों के अलावा सी और जावास्क्रिप्ट के बीच सबसे बड़ा अंतर यह है कि जावास्क्रिप्ट में सभी चर वास्तव में संकेत देते हैं। क्योंकि जावास्क्रिप्ट एक गतिशील भाषा है, एक ही चर का उपयोग समय के विभिन्न बिंदुओं पर एक number और एक string को स्टोर करने के लिए किया जा सकता है।

जावास्क्रिप्ट एक व्याख्याकृत भाषा है, और दुभाषिया को आमतौर पर सी ++ में लिखा जाता है इस प्रकार जावास्क्रिप्ट में सभी चर मेजबान भाषा (यहां तक ​​कि प्राचीनतम) में वस्तुओं के लिए मैप किए जाते हैं।

जब हम JavaScript में एक वेरिएबल घोषित करते हैं तो दुभाषिया इसके लिए एक नया सामान्य वैरिएबल बनाता है। तब जब हम इसे एक मान देते हैं (यह एक आदिम या एक संदर्भ होता है) तो दुभाषिया बस उसे एक नया ऑब्जेक्ट प्रदान करता है आंतरिक रूप से यह जानता है कि कौन से ऑब्जेक्ट आदिम हैं और वास्तव में ऑब्जेक्ट हैं

संकल्पनात्मक रूप से ऐसा कुछ करने की तरह है:

 JSGenericObject ten = new JSNumber(10); // var ten = 10; 

प्रश्न: इसका क्या अर्थ है?

ए: इसका मतलब है कि जावास्क्रिप्ट में सभी मान (प्राथमिकताएं और ऑब्जेक्ट्स) को ढेर से आवंटित किया जाता है। यहां तक ​​कि वे चर ही ढेर से आवंटित किए जाते हैं। यह कहना गलत है कि प्राथमिकताएं ढेर से आवंटित की जाती हैं और केवल वस्तुओं को ढेर से आवंटित किया जाता है। सी और जावास्क्रिप्ट के बीच यह सबसे बड़ा अंतर है

जावास्क्रिप्ट में Primitive values डेटा है जो stack पर संग्रहीत हैं।

Primitive value उस स्थान पर सीधे जमा हो जाता है जो चर तक पहुंचता है।

और Reference values ऑब्जेक्ट हैं जो heap में संग्रहीत हैं।

वेरिएबल स्थान में संग्रहीत संदर्भ मान मेमोरी में एक स्थान के लिए सूचक है जहां ऑब्जेक्ट को संग्रहीत किया जाता है।

JavaScript पांच आदिम डेटा प्रकारों का समर्थन करता है: number, string, Boolean, undefined, and null

इन प्रकारों को प्राचीन प्रकार के रूप में संदर्भित किया जाता है क्योंकि वे मूलभूत इमारत ब्लाकों हैं जिनसे अधिक जटिल प्रकार का निर्माण किया जा सकता है।

पांच में, केवल number, string, and Boolean वास्तव में डेटा संग्रहीत करने की भावना में वास्तविक डेटा प्रकार हैं।

विशेष परिस्थितियों में उत्पन्न होने वाले Undefined and null प्रकार हैं primitive type की स्मृति में एक निश्चित आकार है उदाहरण के लिए, एक संख्या स्मृति के आठ बाइट्स में रहती है, और एक बूलियन मान को केवल एक बिट के साथ प्रदर्शित किया जा सकता है।

और संदर्भ प्रकार किसी भी लम्बाई का हो सकता है – उनके पास निश्चित आकार नहीं है

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

एक आदिम प्रकार की स्मृति में एक निश्चित आकार है उदाहरण के लिए, एक संख्या स्मृति के आठ बाइट्स में रहती है, और एक बूलियन मान को केवल एक बिट के साथ प्रदर्शित किया जा सकता है। संख्या प्रकार आदिम प्रकारों का सबसे बड़ा है। अगर प्रत्येक जावास्क्रिप्ट वीरिएबल स्मृति के आठ बाइट्स को आरक्षित रखता है, तो वेरिएबल सीधे किसी भी आदिम मान को धारण कर सकता है।

यह एक सरलीकरण है और वास्तविक जावास्क्रिप्ट क्रियान्वयन के विवरण के रूप में इसका उद्देश्य नहीं है।

संदर्भ प्रकार एक और बात है, फिर भी उदाहरण, उदाहरण के लिए, किसी भी लम्बाई का हो सकता है – उनके पास निश्चित आकार नहीं है सरणियों के लिए भी यही सच है: एक सरणी में कोई भी तत्व हो सकते हैं। इसी तरह, किसी फ़ंक्शन में JavaScript कोड का कोई भी राशि हो सकती है। चूंकि इन प्रकारों में निश्चित आकार नहीं है, इसलिए उनके मूल्यों को सीधे प्रत्येक चर के साथ जुड़े आठ बाइट्स मेमोरी में संग्रहीत नहीं किया जा सकता है। इसके बजाय, वेरिएबल मूल्य के संदर्भ में स्टोर करता है। आमतौर पर, यह संदर्भ सूचक या मेमोरी एड्रेस का कोई रूप है। यह डेटा वैल्यू ही नहीं है, लेकिन यह वैरिएबल कहता है कि मूल्य को कैसे खोजना है।

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

 var a = 3.14; // Declare and initialize a variable var b = a; // Copy the variable's value to a new variable a = 4; // Modify the value of the original variable alert(b) // Displays 3.14; the copy has not changed 

इस कोड के बारे में आश्चर्यजनक बात नहीं है अब विचार करें कि यदि हम कोड को थोड़ी सी बदल देते हैं तो यह संख्याओं के बजाय एरेज़ (संदर्भ प्रकार) का उपयोग करता है:

 var a = [1,2,3]; // Initialize a variable to refer to an array var b = a; // Copy that reference into a new variable a[0] = 99; // Modify the array using the original reference alert(b); // Display the changed array [99,2,3] using the new reference 

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