Tiền tố và Hậu tố trong JavaScript
Thực ra, phép toán tăng và giảm
có thể được viết theo hai cách. Hãy
xem xét các cách này với ví dụ ++,
còn đối với -- mọi thứ sẽ tương tự.
Ở cách thứ nhất, phép toán được viết sau
tên biến, như thế này: a++, còn
ở cách thứ hai - trước tên biến,
như thế này: ++a.
Dạng thứ nhất được gọi là hậu tố, còn dạng thứ hai - tiền tố. Hãy xem, trong những trường hợp nào sự khác biệt giữa hai dạng này thể hiện rõ.
Giả sử chúng ta có mã alert(a++) và
mã alert(++a).
Trong trường hợp alert(a++), biến đầu tiên
sẽ được in ra, sau đó mới tăng lên một đơn vị,
còn trong trường hợp alert(++a), biến đầu tiên
sẽ tăng lên một đơn vị, sau đó mới được in ra.
Trong ví dụ tiếp theo, lệnh alert đầu tiên sẽ in ra
0, vì đầu tiên việc in ra màn hình sẽ thực hiện,
và chỉ sau đó biến mới tăng lên:
let num = 0;
alert(num++); // sẽ in ra 0
alert(num); // sẽ in ra 1
Và bây giờ biến đầu tiên sẽ tăng lên, và chỉ sau đó mới in ra màn hình:
let num = 0;
alert(++num); // sẽ in ra 1 - biến đã tăng ngay lập tức
Hành vi này không chỉ đúng với việc in ra màn hình, mà còn đúng với phép gán:
let num1 = 0;
let num2 = num1++; // giá trị 0 sẽ được ghi vào biến num2
alert(num2); // sẽ in ra 0
alert(num1); // sẽ in ra 1 - biến num1 đã thay đổi sau khi ghi vào num2
Và bây giờ hãy đổi từ dạng hậu tố sang dạng tiền tố:
let num1 = 0;
let num2 = ++num1; // giá trị 1 sẽ được ghi vào biến num2
alert(num2); // sẽ in ra 1
Nếu phép toán của chúng ta được thực hiện trên một dòng riêng biệt, thì không có sự khác biệt giữa dạng tiền tố và hậu tố:
let num = 0;
++num;
num++;
alert(num); // sẽ in ra 2
Không chạy mã, hãy xác định điều gì sẽ được in ra màn hình:
let num = 3;
alert(++num);
Không chạy mã, hãy xác định điều gì sẽ được in ra màn hình:
let num = 3;
alert(num++);
Không chạy mã, hãy xác định điều gì sẽ được in ra màn hình:
let num = 3;
alert(--num);
Không chạy mã, hãy xác định điều gì sẽ được in ra màn hình:
let num = 3;
alert(num--);
Không chạy mã, hãy xác định điều gì sẽ được in ra màn hình:
let num1 = 3;
let num2 = ++num1;
alert(num1);
alert(num2);
Không chạy mã, hãy xác định điều gì sẽ được in ra màn hình:
let num1 = 3;
let num2 = num1++;
alert(num1);
alert(num2);
Không chạy mã, hãy xác định điều gì sẽ được in ra màn hình:
let num1 = 3;
let num2 = --num1;
alert(num1);
alert(num2);
Không chạy mã, hãy xác định điều gì sẽ được in ra màn hình:
let num1 = 3;
let num2 = num1--;
alert(num1);
alert(num2);
Không chạy mã, hãy xác định điều gì sẽ được in ra màn hình:
let num1 = 3;
num1++;
let num2 = num1--;
alert(num1++);
alert(--num2);