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


135

जावास्क्रिप्ट में आप ++पहले ( पूर्व वेतन वृद्धि ) या चर नाम ( पोस्ट-इन्क्रीमेंट ) के बाद ऑपरेटर का उपयोग कर सकते हैं । चर को बढ़ाने के इन तरीकों के बीच क्या, यदि कोई हो, क्या अंतर हैं?



मैं कल इस बारे में सोच रहा था कि C / C ++ में बुरी धारणाओं के बारे में पूछे गए सवाल के जवाब को पढ़ें । सभी मामलों में, क्या हम गारंटी दे सकते हैं कि जावास्क्रिप्ट इस तरह से व्यवहार करता है? या क्या आपको लगता है कि वेतन वृद्धि कथन का अधिक जटिल कथन में उपयोग करना बुरा है?
पाल्सीम

पिछली टिप्पणी वास्तव में उत्तर की एक प्रति (एक गैर-उत्तर, बल्कि) है जिसे मैंने 2010 में पोस्ट किया था । मैंने उत्तर हटा दिया है, लेकिन जॉन स्कीट ने उत्तर दिया था : "ECMA-262 को देखते हुए, यह उचित रूप से अच्छी तरह से निर्दिष्ट लगता है।"
पाल्सिम

जवाबों:


242

अन्य भाषाओं की तरह ही:

  • ++x (प्री-इन्क्रीमेंट) का अर्थ है "चर को बढ़ाना; अभिव्यक्ति का मूल्य अंतिम मूल्य है"
  • x++ (पोस्ट-इन्क्रीमेंट) का अर्थ है "मूल मूल्य को याद रखें, फिर चर को बढ़ाएं; अभिव्यक्ति का मूल्य मूल मूल्य है"

अब जब स्टैंडअलोन स्टेटमेंट के रूप में इस्तेमाल किया जाता है, तो उनका मतलब एक ही होता है:

x++;
++x;

अंतर तब आता है जब आप कहीं और अभिव्यक्ति के मूल्य का उपयोग करते हैं। उदाहरण के लिए:

x = 0;
y = array[x++]; // This will get array[0]

x = 0;
y = array[++x]; // This will get array[1]

13
शाप देते हैं, मैं तुम्हें लगभग एक जवाब के लिए हरा देता हूं मैं एक व्यावहारिक jsfiddle जवाब लोड करने के लिए नहीं रोका था। ;-)
क्रिस

2
यदि आप + 1इसके बजाय इसका उपयोग करते हैं तो यह कैसा दिखेगा ++? क्या संख्या जोड़ने से पहले या बाद में वेतन वृद्धि का कोई तरीका है?
केवॉन

मैं जानना चाहूंगा कि यदि आप यह ऑपरेशन r1 = (x ++) + (x ++) क्यों करते हैं; यह आपके उदाहरण के अनुसार अपेक्षित परिणाम नहीं देता है।
जीन जिमेनेज़

1
@JJJimenez: वैसे यह मेरे द्वारा अपेक्षित परिणाम का उत्पादन करता है। उदाहरण के लिए, यदि x10 से शुरू होता है, तो मान r121 है, जो 10 + 11 है। पहली x++अभिव्यक्ति का मान १० है और x११ से बढ़ गया है। दूसरी x++अभिव्यक्ति का मूल्य ११ है और x१२ है।
जॉन स्कीट

प्रिय @JonSkeet उस सुपर-फास्ट प्रतिक्रिया के लिए धन्यवाद, मैं जावास्क्रिप्ट सीखने के लिए नया हूं और मेरा भ्रम इस बारे में है कि एक वेतन वृद्धि और दूसरा क्यों नहीं।
जीन जिमेनेज

43
  • ++x मूल्य बढ़ाता है, फिर उसका मूल्यांकन करता है और संग्रहीत करता है।
  • x++ मूल्य का मूल्यांकन करता है, फिर वृद्धि करता है और इसे संग्रहीत करता है।
var n = 0, m = 0;

alert(n++); /* Shows 0, then stores n = 1 */
alert(++m); /* Shows 1, then stores m = 1 */

ध्यान दें कि ++xजहां संभव हो, का उपयोग करने के लिए थोड़ा प्रदर्शन लाभ हैं, क्योंकि आप चर को पढ़ते हैं, इसे संशोधित करते हैं, फिर इसका मूल्यांकन करें और इसे स्टोर करें। उस x++ऑपरेटर को बनाम जहां आप मूल्य को पढ़ते हैं, उसका मूल्यांकन करते हैं, उसे संशोधित करते हैं, फिर उसे स्टोर करते हैं।


7

जैसा कि मैं उन्हें समझता हूं कि यदि आप उन्हें स्टैंडअलोन का उपयोग करते हैं तो वे वही काम करते हैं। यदि आप उन्हें अभिव्यक्ति के रूप में परिणाम देने की कोशिश करते हैं तो वे अलग हो सकते हैं। अंतर देखने के लिए अलर्ट (++ i) की तुलना में अलर्ट (i ++) आज़माएं। i ++ जोड़ से पहले i का मूल्यांकन करता है और ++ i मूल्यांकन करने से पहले जोड़ देता है।

एक उदाहरण के लिए http://jsfiddle.net/xaDC4/ देखें ।



0
var x = 0, y = 0;

//post-increment: i++ returns value then adds one to it
console.log('x++ will log: ', x++); //0
console.log('x after x++ : ', x);    //1

//pre-increment: adds one to the value, then returns it
console.log('++y will log: ', ++y); //1
console.log('y after ++y : ', y);   //1

0

मैंने पोस्ट-इन्क्रीमेंट और प्री-इन्क्रीमेंट को समझने का स्पष्टीकरण दिया है। इसलिए मैं इसे यहां रख रहा हूं।

करने के 0लिए देता हैx

let x = 0;

बाद के वेतन वृद्धि के साथ शुरू करते हैं

console.log(x++); // Outputs 0

क्यों?

आइए x++अभिव्यक्ति को तोड़ दें

x = x;
x = x + 1;

पहला स्टेटमेंट वह है जिसका मूल्य xहै0

और बाद में जब आप xकहीं भी चर का उपयोग करते हैं , तो दूसरे कथन को निष्पादित किया जाता है

दूसरा कथन इस x + 1अभिव्यक्ति का मूल्य लौटाता है जो है(0 + 1) = 1

xइस अवस्था में मूल्य का ध्यान रखें जो है1

अब प्री-इंक्रीमेंट से शुरुआत करते हैं

console.log(++x); // Outputs 2

क्यों?

आइए ++xअभिव्यक्ति को तोड़ दें

x = x + 1;
x = x;

पहला कथन इस x + 1अभिव्यक्ति का मूल्य देता है जो है(1 + 1) = 2

दूसरा बयान मूल्य का रिटर्न xहै जो 2इतना x = 2इस प्रकार यह रिटर्न2

आशा है कि यह आपको समझने में मदद करेगा कि पोस्ट-इन्क्रीमेंट और प्री-इन्क्रीमेंट क्या हैं!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.