Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Các toán tử số học (Arithmetic Operators) trong JavaScript

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ênMô tảVí dụ (a=10, b=3)
+Addition / CộngCộng 2 số hoặc nối chuỗi10 + 3 = 13, "a" + "b" = "ab"
-Subtraction / TrừTrừ số thứ 2 từ số thứ 110 - 3 = 7
*Multiplication / NhânNhân 2 số10 * 3 = 30
/Division / ChiaChia số thứ 1 cho số thứ 210 / 3 = 3.333...
%Modulus / Chia lấy dưPhần dư của phép chia nguyên10 % 3 = 1
**Exponentiation / Lũy thừa (ES2016)Số thứ 1 mũ số thứ 22 ** 3 = 8, 10 ** -1 = 0.1
++Increment / Tăng 1Tăng biến lên 1 (prefix/postfix)++a (11), a++ (trả 10 rồi tăng)
--Decrement / Giảm 1Giảm biến đi 1 (prefix/postfix)--a (9), a-- (trả 10 rồi giảm)
+xUnary Plus / Đơn cộngÉp kiểu sang Number+"5" = 5, +true = 1
-xUnary 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.sqrt
  • Math.floor, Math.ceil, Math.round, Math.trunc
  • Math.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/-x unary – é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.