मैंने निम्नलिखित जावास्क्रिप्ट लिखा है:
var myArray = ['a', 'b', 'c'];
var copyOfMyArray = myArray;
copyOfMyArray.splice(0, 1);
alert(myArray); // alerts ['b','c']
alert(copyOfMyArray); // alerts ['b','c']
var myNumber = 5;
var copyOfMyNumber = myNumber;
copyOfMyNumber = copyOfMyNumber - 1;
alert(myNumber); // alerts 5
alert(copyOfMyNumber); // alerts 4
यह कोड एक चर घोषित करता है myArrayऔर इसे एक सरणी मान पर सेट करता है। यह तब एक दूसरे चर की घोषणा करता है copyOfMyArrayऔर इसे सेट करता है myArray। यह एक ऑपरेशन करता है copyOfMyArrayऔर फिर दोनों को अलर्ट करता है myArrayऔर copyOfMyArray। किसी तरह, जब मैं एक ऑपरेशन करता हूं, तो copyOfMyArrayऐसा लगता है कि उसी ऑपरेशन को किया जाता है myArray।
कोड तब एक संख्या मान के साथ एक ही काम करता है: यह एक चर घोषित करता है myNumberऔर इसे एक संख्या मान पर सेट करता है। यह तब एक दूसरे चर की घोषणा करता है copyOfMyNumberऔर इसे सेट करता है myNumber। यह एक ऑपरेशन करता है copyOfMyNumberऔर फिर दोनों को अलर्ट करता है myNumberऔर copyOfMyNumber। यहां, मुझे अपेक्षित व्यवहार मिलता है: के लिए अलग-अलग मूल्य myNumberऔर copyOfMyNumber।
एक सरणी और जावास्क्रिप्ट में एक संख्या के बीच का अंतर क्या है कि ऐसा लगता है कि एक सरणी बदलने से सरणी की एक प्रति का मूल्य बदल जाता है, जहां एक संख्या को बदलने से संख्या की प्रतिलिपि का मूल्य नहीं बदलता है?
मैं अनुमान लगा रहा हूं कि किसी कारण से, सरणी को संदर्भ और संख्या द्वारा मान से संदर्भित किया जाता है, लेकिन क्यों? मैं कैसे जान सकता हूं कि अन्य वस्तुओं के साथ क्या व्यवहार करना है?
myArray.slice(0);उस संदर्भ में सीधे असाइन करने से कोई कमी है ?