2011-11-23 18 views
7

मैं सी # पृष्ठभूमि से आया हूं जहां जनता के साथ अपरिवर्तनीय हासिल किया जाता है, निजी सेट गुण। मैंने पढ़ा है कि जावास्क्रिप्ट में संख्या तो अडिग हैं कि कैसे मैं निम्नलिखितजावास्क्रिप्ट संख्या- अपरिवर्तनीय

var x = 6/2; 
console.log(x); // 3 
x = 8; 
console.log(x); // 8 

मैं एक्स बदल दिया है क्या कर सकते हैं, जो मैंने सोचा कि मैं नहीं कर सकता?

+2

स्ट्रिंग्स सी # में अपरिवर्तनीय हैं। 'var str =" hi "; str = "world"; 'अब' str' अब 'दुनिया' के बराबर है 'क्या हुआ? – asawyer

+1

यदि संख्या उत्परिवर्तनीय थी, तो आपके पास 'y = x' हो सकता है, 'x' और' x === y 'संशोधित हो सकता है। लेकिन आप नहीं कर सकते। बेशक आप हमेशा 'x' को संदर्भित कर सकते हैं। –

+3

"सार्वजनिक मिलता है, निजी सेट" अपरिवर्तनीयता के साथ बहुत कम करना है। यदि यह अपरिवर्तनीय है, तो कोई 'सेट' नहीं है। – delnan

उत्तर

19

संख्याएं खुद को अपरिवर्तनीय हैं। वेरिएबल में संग्रहीत किए गए संदर्भ नहीं हैं।

तो 6/2 आप अपरिवर्तनीय 3 के लिए एक संदर्भ हो जाता है, और फिर = 8 अपरिवर्तनीय 8 के लिए एक नया संदर्भ प्रदान करती है।

+7

और इनमें से कोई भी जेएस के लिए विशिष्ट नहीं है। यह सी # सहित हर भाषा में काफी अधिक लागू होता है। – delnan

1

सी # प्रोग्रामर को उस ऑब्जेक्ट को बनाने की अनुमति देता है जिसे निर्माण (अपरिवर्तनीय ऑब्जेक्ट्स) के बाद संशोधित नहीं किया जा सकता है। यदि आप एक अपरिवर्तनीय ऑब्जेक्ट में C# में एक नई ऑब्जेक्ट असाइन करते हैं, जैसे स्ट्रिंग कहें। आपको मूल को संशोधित करने के बजाय एक नई स्ट्रिंग मिल रही है।

जो आपने यहां प्रदर्शित किया वह सब अलग नहीं है। आप एक const बजाय

const x = 6/2; 
console.log(x); // 3 
x = 8; 
console.log(x); // 3 

Reference

सिंटेक्स

स्थिरांक varname1 = मान 1 [, varname2 2 = मान [, varname3 = value3 कोशिश कर सकते हैं [, ... [, varnameN = मूल्य एन]]]];

ब्राउज़र संगतता

स्थिरांक का वर्तमान क्रियान्वयन एक Mozilla- विशिष्ट एक्सटेंशन है और यह फ़ायरफ़ॉक्स & क्रोम (V8) में समर्थित है ECMAScript 5. का हिस्सा नहीं है। सफारी 5.1.7 और ओपेरा 12.00 के रूप में, यदि आप इन ब्राउज़र में कॉन्स्ट के साथ एक चर परिभाषित करते हैं, तो भी आप बाद में अपना मान बदल सकते हैं। यह इंटरनेट एक्सप्लोरर 6-9 में समर्थित नहीं है, या इंटरनेट एक्सप्लोरर 10 के पूर्वावलोकन में समर्थित है। कॉन्स कीवर्ड वर्तमान में फ़ंक्शन स्कोप (जैसे var के साथ घोषित चर) में निरंतर घोषित करता है।

+0

यह भी मान्य जावास्क्रिप्ट नहीं है। यह वैध सी # या तो नहीं है ('x' के लिए एक प्रकार की कमी)। और न तो भाषा उस स्निपेट को पूरी तरह से स्वीकार करती है और टिप्पणियां बताती है कि टिप्पणियां क्या इंगित करती हैं। आप क्या दिखाने की कोशिश कर रहे हैं? इसके अलावा, आप स्पष्टीकरण चर के साथ वस्तुओं को भ्रमित करने लगते हैं - कृपया इसे सीधे प्राप्त करें, आपका वर्तमान स्पष्टीकरण * बहुत * उलझन में है! – delnan

+0

मेरा मुद्दा यह है कि जावास्क्रिप्ट में दोनों परिणाम संभव हैं। निश्चित रूप से, यह सीधे ECMAScript नहीं है। मुझे बताएं कि वेब कार्यान्वयन "टी" के मानकों के विनिर्देशों का पालन करता है? ऑफ़लाइन स्टोरेज, जावास्क्रिप्ट, एचटीएमएल, ब्राउजर? नहीं नहीं नहीं नहीं। वेब देवताओं के रूप में हमें बॉक्स के बाहर सोचना है। समर्थित उपकरण और पर्यावरण को उचित तकनीक का उपयोग करें। –

+1

मैं बोल्ड हो जाऊंगा और कहूंगा कि कोई (प्रासंगिक) जावास्क्रिप्ट कार्यान्वयन * वह * टूटा हुआ नहीं है। कोई 'const' कीवर्ड नहीं है और बाद में असाइनमेंट को चुपचाप छोड़ने के लिए कोई अन्य तरीका नहीं है। या आप ऐसी चीज के लिए एक संदर्भ प्रदान कर सकते हैं? -1 क्योंकि मुझे लगता है कि आप बीएस से बात कर रहे हैं और इसके साथ सामना करते समय झाड़ी के आसपास मार रहे हैं। – delnan

संबंधित मुद्दे