Trong Javascript, bạn có thể sử dụng toán tử ++
trước hoặc sau tên biến. Điều gì, nếu có, là sự khác biệt giữa những cách tăng một biến?++ someVariable Vs. someVariable ++ trong Javascript
Trả lời
Tương tự như trong các ngôn ngữ khác:
++x
(pre-increment) có nghĩa là "tăng biến; giá trị của biểu thức là giá trị cuối cùng"x++
(post-increment) có nghĩa là "ghi nhớ giá trị ban đầu, sau đó tăng biến; giá trị của biểu thức là giá trị ban đầu"
Bây giờ khi được sử dụng như một tuyên bố độc lập, họ có nghĩa là cùng một điều:
x++;
++x;
Sự khác biệt xuất hiện khi bạn sử dụng giá trị của biểu thức ở nơi khác. Ví dụ:
x = 0;
y = array[x++]; // This will get array[0]
x = 0;
y = array[++x]; // This will get array[1]
Curses , Tôi gần như đánh bại bạn một câu trả lời đã không dừng lại để tải lên một câu trả lời thực tế jsfiddle. ;-) – Chris
Điều này sẽ trông như thế nào nếu bạn sử dụng '+ 1' thay vì' ++'? Có cách nào để tăng trước hoặc sau khi thêm số không? – Keavon
Tôi muốn biết tại sao nếu bạn thực hiện thao tác này const r1 = (x ++) + (x ++); nó không tạo ra kết quả mong đợi theo ví dụ của bạn. –
Khi tôi hiểu chúng, nếu bạn sử dụng chúng độc lập, chúng cũng làm như vậy. Nếu bạn cố gắng xuất kết quả của chúng như là một biểu thức thì chúng có thể khác nhau. Hãy thử cảnh báo (i ++) so với cảnh báo (++ i) để thấy sự khác biệt. i + + đánh giá i trước khi bổ sung và ++ i thực hiện phép cộng trước khi đánh giá.
Xem http://jsfiddle.net/xaDC4/ để biết ví dụ.
++x
tăng giá trị, sau đó đánh giá và lưu trữ giá trị đó.x++
đánh giá giá trị, sau đó tăng và lưu trữ giá trị đó.
var n = 0, m = 0;
alert(n++); /* Shows 0, then stores n = 1 */
alert(++m); /* Shows 1, then stores m = 1 */
Lưu ý rằng có những lợi ích hiệu suất nhẹ để sử dụng ++x
nếu có thể, bởi vì bạn đọc biến, sửa đổi nó, sau đó đánh giá và lưu trữ nó. So với các nhà điều hành x++
nơi bạn đọc giá trị, đánh giá nó, sửa đổi nó, sau đó lưu trữ nó.
Tôi đã suy nghĩ về điều này ngày hôm qua đọc this response cho câu hỏi về bad assumptions in C/C++. Trong mọi trường hợp, chúng tôi có thể đảm bảo rằng Javascript hoạt động theo cách này không? Hay bạn có nghĩ rằng thực tế xấu để sử dụng câu lệnh tăng trong một câu lệnh phức tạp hơn?
Nhìn vào ECMA-262, có vẻ như được xác định hợp lý. –
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
Xem thêm các ngôn ngữ-agnostic [Sự khác biệt giữa i ++ và ++ i trong vòng một?] (Http://stackoverflow.com/q/484462/1048572) – Bergi