ใน JavaScript คุณสามารถใช้++
โอเปอเรเตอร์ก่อน ( เพิ่มก่อน ) หรือหลังชื่อตัวแปร ( เพิ่มหลัง ) อะไรคือความแตกต่างระหว่างวิธีการเพิ่มตัวแปรเหล่านี้?
ใน JavaScript คุณสามารถใช้++
โอเปอเรเตอร์ก่อน ( เพิ่มก่อน ) หรือหลังชื่อตัวแปร ( เพิ่มหลัง ) อะไรคือความแตกต่างระหว่างวิธีการเพิ่มตัวแปรเหล่านี้?
คำตอบ:
เช่นเดียวกับในภาษาอื่น ๆ :
++x
(pre-Increment) หมายถึง "การเพิ่มตัวแปรค่าของนิพจน์คือค่าสุดท้าย"x++
(post-Increment) หมายถึง "จำค่าเดิมจากนั้นเพิ่มตัวแปรค่าของนิพจน์คือค่าดั้งเดิม"ตอนนี้เมื่อใช้เป็นคำสั่งแบบสแตนด์อโลนพวกเขาหมายถึงสิ่งเดียวกัน:
x++;
++x;
ความแตกต่างเกิดขึ้นเมื่อคุณใช้ค่าของนิพจน์ที่อื่น ตัวอย่างเช่น:
x = 0;
y = array[x++]; // This will get array[0]
x = 0;
y = array[++x]; // This will get array[1]
+ 1
แทน++
? มีวิธีเพิ่มก่อนหรือหลังเมื่อเพิ่มตัวเลขหรือไม่?
x
เริ่มต้นด้วย 10 ค่าของr1
คือ 21 ซึ่งก็คือ 10 + 11 ค่าของx++
นิพจน์แรกคือ 10 และx
เพิ่มขึ้นเป็น 11 ค่าของx++
นิพจน์ที่สองคือ 11 และx
เพิ่มขึ้นเป็น 12
++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 ++) เทียบกับ alert (++ i) เพื่อดูความแตกต่าง i ++ ประเมินเป็น i ก่อนการเพิ่มและ ++ ฉันทำการเพิ่มก่อนที่จะประเมิน
ดูตัวอย่างhttp://jsfiddle.net/xaDC4/
ฉันมีคำอธิบายเกี่ยวกับการทำความเข้าใจหลังการเพิ่มและการเพิ่มขึ้นล่วงหน้า ผมวางไว้ตรงนี้
ให้กำหนด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
หวังว่านี่จะช่วยให้คุณเข้าใจว่าการเพิ่มหลังและการเพิ่มขึ้นล่วงหน้าคืออะไร!
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
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