سؤال

في JavaScript يمكنك استخدامه ++ المشغل من قبل (ما قبل المخلصة) أو بعد الاسم المتغير (بعد الزيادة). ما هي الاختلافات بين هذه الطرق لزيادة المتغير ، إن وجدت ، بين هذه الطرق لزيادة المتغير؟

هل كانت مفيدة؟

المحلول

كما هو الحال في اللغات الأخرى:

  • ++x (ما قبل الخلاصة) يعني "زيادة المتغير ؛ قيمة التعبير هي القيمة النهائية"
  • x++ (ما بعد الخلاصة) يعني "تذكر القيمة الأصلية ، ثم زيادة المتغير ؛ قيمة التعبير هي القيمة الأصلية"

الآن عند استخدامه كبيان مستقل ، فهي تعني نفس الشيء:

x++;
++x;

يأتي الفرق عند استخدام قيمة التعبير في مكان آخر. فمثلا:

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

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

نصائح أخرى

  • ++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++ المشغل حيث تقرأ القيمة ، وتقييمها ، وتعديلها ، ثم تخزينها.

كما أفهمهم إذا كنت تستخدمها مستقلة ، فإنهم يفعلون نفس الشيء. إذا حاولت إخراج نتيجة لهم كتعبير ، فقد تختلف. جرب ALERT (i ++) مقارنةً بالتنبيه (++ i) لمعرفة الفرق. I ++ يقييم أنا قبل الإضافة و ++ أقوم بالإضافة قبل التقييم.

نرى http://jsfiddle.net/xadc4/ على سبيل المثال.

كنت أفكر في هذا أمس القراءة هذا الرد إلى السؤال عن الافتراضات السيئة في C/C ++. في جميع الحالات ، هل يمكننا أن نضمن أن JavaScript يتصرف بهذه الطريقة؟ أو هل تعتقد أنه من الممارسات السيئة استخدام بيان الزيادة في بيان أكثر تعقيدًا على الإطلاق؟

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
var a = 1;
var b = ++a;
alert('a:' + a + ';b:' + b); //a:2;b:2

var c = 1;
var d = c++;
alert('c:' + c + ';d:' + d); //c:2;d:1

JSfiddle

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top