JavaScript hỗ trợ các toán tử số học cơ bản và nâng cao. Tất cả toán hạng được ép kiểu sang Number (trừ + cho string).
Danh sách toán tử
| Toán tử | Tên | Mô tả | Ví dụ (a=10, b=3) |
|---|---|---|---|
+ | Addition / Cộng | Cộng 2 số hoặc nối chuỗi | 10 + 3 = 13, "a" + "b" = "ab" |
- | Subtraction / Trừ | Trừ số thứ 2 từ số thứ 1 | 10 - 3 = 7 |
* | Multiplication / Nhân | Nhân 2 số | 10 * 3 = 30 |
/ | Division / Chia | Chia số thứ 1 cho số thứ 2 | 10 / 3 = 3.333... |
% | Modulus / Chia lấy dư | Phần dư của phép chia nguyên | 10 % 3 = 1 |
** | Exponentiation / Lũy thừa (ES2016) | Số thứ 1 mũ số thứ 2 | 2 ** 3 = 8, 10 ** -1 = 0.1 |
++ | Increment / Tăng 1 | Tăng biến lên 1 (prefix/postfix) | ++a (11), a++ (trả 10 rồi tăng) |
-- | Decrement / Giảm 1 | Giảm biến đi 1 (prefix/postfix) | --a (9), a-- (trả 10 rồi giảm) |
+x | Unary Plus / Đơn cộng | Ép kiểu sang Number | +"5" = 5, +true = 1 |
-x | Unary Minus / Đơn trừ | Đảo dấu + ép kiểu Number | -"5" = -5 |
Prefix vs Postfix (++ / --)
let a = 5;
console.log(++a); // 6 (tăng trước, trả về giá trị MỚI)
console.log(a); // 6
let b = 5;
console.log(b++); // 5 (trả về giá trị CŨ, rồi tăng)
console.log(b); // 6
Ví dụ demo từ bài gốc (đã sửa)
<script>
let a = 33, b = 10;
const c = "Test";
const br = "<br />";
document.write("a + b = " + (a + b) + br); // 43
document.write("a - b = " + (a - b) + br); // 23
document.write("a * b = " + (a * b) + br); // 330
document.write("a / b = " + (a / b) + br); // 3.3
document.write("a % b = " + (a % b) + br); // 3
document.write("a + b + c = " + (a + b + c) + br); // "43Test" (nối chuỗi!)
a = ++a; // 34
document.write("++a = " + a + br); // 34
b = --b; // 9
document.write("--b = " + b + br); // 9
</script>
Cạm bẫy phổ biến
// 1. + cho string concatenation
"5" + 3; // "53" (string)
"5" - 3; // 2 (number)
"5" * 3; // 15 (number)
// 2. Độ chính xác float
0.1 + 0.2; // 0.30000000000000004
0.1 + 0.2 === 0.3; // false
// Fix: Math.round((0.1+0.2)*100)/100 hoặc dùng decimal.js
// 3. ++/-- trong biểu thức phức tạp
let x = 5;
let y = x++ + ++x; // y = 5 + 7 = 12, x = 7 (KHÓ ĐOÁN - TRÁNH)
// 4. Whitespace gây nhầm lẫn
a = b = c = 1;
++a; // a=2
b++; // b=2 (postfix)
c; // c=1
// Nhưng: a = b++ + c; // a = 1+1=2, b=2
BigInt Arithmetic (ES2020)
const big = 9007199254740991n;
big + 1n; // 9007199254740992n (đúng!)
big * 2n; // 18014398509481982n
// big + 1; // TypeError: Cannot mix BigInt and number
// Math.max(1n, 2n) // TypeError
Math Object – Hàm toán học nâng cao
Math.abs, Math.max, Math.min, Math.pow, Math.sqrtMath.floor, Math.ceil, Math.round, Math.truncMath.random()– số ngẫu nhiên [0, 1)Math.PI, Math.E, Math.LN2, Math.LN10...
Tóm tắt
- 7 toán tử cơ bản:
+ - * / % **(thêm**ES2016). ++/--prefix/postfix – khác giá trị trả về.+x/-xunary – ép kiểu Number.- Cẩn thận
+nối chuỗi, độ chính xác float,++/--trong biểu thức. - BigInt cho số nguyên lớn chính xác.