Chào mừng bạn đến với thế giới lập trình JavaScript! Nếu ví von JavaScript như một ngôn ngữ, thì các biến và giá trị là danh từ, còn toán tử (operators) chính là những động từ, những chất kết dính tạo nên sự logic và sức mạnh cho mã của bạn. Chúng là những công cụ nền tảng nhất giúp bạn thực hiện các phép tính, so sánh giá trị và đưa ra quyết định.
Trong bài viết này, chúng ta sẽ cùng nhau đi sâu vào từng loại toán tử cơ bản, từ những phép cộng trừ quen thuộc đến những so sánh logic phức tạp. Dù bạn là người mới bắt đầu hay muốn củng cố lại kiến thức, đây chính là hành trang không thể thiếu trên con đường chinh phục JavaScript.
1. Toán tử là gì? Một cái nhìn tổng quan 😊
Rất đơn giản, toán tử là một ký hiệu đặc biệt (+
, -
, *
, /
, =
, >
) được sử dụng để thực hiện một thao tác trên một, hai hoặc ba giá trị. Những giá trị này được gọi là toán hạng (operands).
Hãy xem ví dụ kinh điển này:
let a = 5 + 10
+
là toán tử (phép cộng).5
và10
là các toán hạng.=
cũng là một toán tử (phép gán).
JavaScript cung cấp nhiều loại toán tử khác nhau, và chúng ta sẽ phân loại chúng để dễ dàng "tiêu hóa" hơn.
2. Các toán tử số học (Arithmetic Operators) 🧮
Đây là nhóm toán tử quen thuộc nhất, dùng để thực hiện các phép toán cơ bản. Giống như chiếc máy tính bỏ túi của bạn vậy!
Toán tử | Tên gọi | Ví dụ | Kết quả | Mô tả |
---|---|---|---|---|
+ | Cộng | 10 + 5 | 15 | Tính tổng hai toán hạng. |
- | Trừ | 10 - 5 | 5 | Lấy toán hạng trái trừ đi toán hạng phải. |
* | Nhân | 10 * 5 | 50 | Nhân hai toán hạng. |
/ | Chia | 10 / 5 | 2 | Chia toán hạng trái cho toán hạng phải. |
% | Chia lấy dư (Modulus) | 10 % 3 | 1 | Trả về số dư của phép chia. |
** | Lũy thừa (Exponentiation) | 2 ** 3 | 8 | Lũy thừa toán hạng trái với số mũ là toán hạng phải (tương đương 2*2*2). |
++ | Tăng lên 1 (Increment) | let a = 5; a++; | a bây giờ là 6 | Tăng giá trị của biến lên 1 đơn vị. |
-- | Giảm đi 1 (Decrement) | let a = 5; a--; | a bây giờ là 4 | Giảm giá trị của biến đi 1 đơn vị. |
💡 Lưu ý đặc biệt với toán tử +
: Khi được sử dụng với chuỗi (string), toán tử +
sẽ thực hiện phép nối chuỗi (concatenation).
let greeting = 'Hello ' + 'world!'
console.log(greeting) // Kết quả: "Xin chào thế giới!"
let number = '5' + 3
console.log(number) // Kết quả: "53" (vì "5" là chuỗi, JavaScript sẽ coi 3 là chuỗi và nối chúng lại)
3. Các toán tử gán (Assignment Operators) ✍️
Toán tử gán dùng để gán một giá trị cho một biến. Toán tử gán cơ bản nhất là dấu bằng (=
). Tuy nhiên, JavaScript còn cung cấp các toán tử gán kết hợp để viết mã ngắn gọn hơn.
Toán tử | Tương đương với | Ví dụ |
---|---|---|
x = y | x = y | let x = 10; |
x += y | x = x + y | let x = 10; x += 5; // x bây giờ là 15 |
x -= y | x = x - y | let x = 10; x -= 5; // x bây giờ là 5 |
x *= y | x = x * y | let x = 10; x *= 5; // x bây giờ là 50 |
x /= y | x = x / y | let x = 10; x /= 5; // x bây giờ là 2 |
x %= y | x = x % y | let x = 10; x %= 3; // x bây giờ là 1 |
x **= y | x = x ** y | let x = 2; x **= 3; // x bây giờ là 8 |
Sử dụng các toán tử này không chỉ giúp code ngắn hơn mà còn dễ đọc hơn khi bạn đã quen thuộc.
4. Các toán tử so sánh (Comparison Operators) 🤔
Toán tử so sánh được dùng trong các câu lệnh logic để xác định sự bằng nhau hoặc khác nhau giữa các biến hoặc giá trị. Kết quả của một phép so sánh luôn là một giá trị boolean (true
hoặc false
). Đây là nền tảng cho việc rẽ nhánh và ra quyết định trong code (ví dụ: trong câu lệnh if...else
).
Toán tử | Tên gọi | Ví dụ | Kết quả |
---|---|---|---|
== | Bằng (So sánh lỏng) | 5 == "5" | true |
=== | Bằng tuyệt đối (So sánh nghiêm ngặt) | 5 === "5" | false |
!= | Không bằng (So sánh lỏng) | 5 != "5" | false |
!== | Không bằng tuyệt đối (So sánh nghiêm ngặt) | 5 !== "5" | true |
> | Lớn hơn | 10 > 5 | true |
< | Nhỏ hơn | 10 < 5 | false |
>= | Lớn hơn hoặc bằng | 10 >= 10 | true |
<= | Nhỏ hơn hoặc bằng | 10 <= 5 | false |
🔥 Trận chiến kinh điển: ==
vs. ===
Đây là một trong những điểm khác biệt quan trọng nhất mà mọi lập trình viên JavaScript cần nắm vững.
==
(Bằng lỏng - Loose Equality): Chỉ so sánh giá trị sau khi đã thực hiện chuyển đổi kiểu dữ liệu (type coercion). Trong ví dụ5 == "5"
, JavaScript sẽ tự động chuyển chuỗi"5"
thành số5
rồi mới so sánh, vì vậy kết quả làtrue
.===
(Bằng nghiêm ngặt - Strict Equality): So sánh cả giá trị và kiểu dữ liệu. Nó không tự động chuyển đổi kiểu. Vì số5
và chuỗi"5"
có kiểu dữ liệu khác nhau,5 === "5"
trả vềfalse
.
👉 Lời khuyên vàng: Hãy luôn ưu tiên sử dụng ===
và !==
để tránh các lỗi ngầm do cơ chế tự động chuyển đổi kiểu dữ liệu gây ra. Điều này giúp mã của bạn trở nên rõ ràng, dễ đoán và ít lỗi hơn.
5. Các toán tử logic (Logical Operators) 🧠
Toán tử logic thường được sử dụng để kết hợp nhiều biểu thức so sánh lại với nhau, cho phép bạn xây dựng những điều kiện phức tạp.
Toán tử | Tên gọi | Mô tả |
---|---|---|
&& | VÀ (AND) | Trả về true nếu cả hai toán hạng đều là true . |
|| | HOẶC (OR) | Trả về true nếu ít nhất một trong hai toán hạng là true . |
! | PHỦ ĐỊNH (NOT) | Đảo ngược giá trị boolean của toán hạng (true thành false và ngược lại). |
Ví dụ thực tế:
let age = 25
let hasDriverLicense = true
// Kiểm tra xem người này có đủ tuổi VÀ có bằng lái để lái xe không
if (age >= 18 && hasDriverLicense) {
console.log('You are allowed to drive.') // Sẽ in ra dòng này
}
let isWeekend = false
let isHoliday = true
// Kiểm tra xem có phải ngày nghỉ không (cuối tuần HOẶC ngày lễ)
if (isWeekend || isHoliday) {
console.log('Today is a day off!') // Sẽ in ra dòng này
}
let isRaining = false
if (!isRaining) {
// KHÔNG phải trời đang mưa
console.log('Let’s go outside for a walk!') // Sẽ in ra dòng này
}
6. Độ ưu tiên của toán tử
Khi một biểu thức có nhiều toán tử, JavaScript sẽ thực hiện chúng theo một thứ tự ưu tiên nhất định. Ví dụ, phép nhân (*
) luôn được thực hiện trước phép cộng (+
).
let result = 5 + 10 * 2 // 10 * 2 được thực hiện trước
console.log(result) // Kết quả là 25, không phải 30
let result2 = (5 + 10) * 2 // (5 + 10) được thực hiện trước
console.log(result2) // Kết quả là 30
Kết luận: Toán tử là "core" của logic lập trình JavaScript
Toán tử là xương sống của logic lập trình trong JavaScript. Việc hiểu rõ và sử dụng thành thạo chúng, đặc biệt là sự khác biệt giữa ==
và ===
, sẽ giúp bạn viết mã một cách hiệu quả, chính xác và chuyên nghiệp hơn.
Đừng chỉ đọc, hãy mở trình soạn thảo mã của bạn lên, thử nghiệm với từng toán tử, tạo ra các biểu thức của riêng mình. Thực hành chính là con đường ngắn nhất để làm chủ những công cụ mạnh mẽ này. Chúc bạn thành công trên hành trình code của mình! 💻✨