Kiểm tra chẵn/lẻ
// Nhanh hơn moduloconst isOdd = n => (n & 1) === 1;isOdd(5); // trueisOdd(4); // falseHoạt động trực tiếp trên bit nhị phân của số. Ít dùng trong thực tế, nhưng rất nhanh và hiệu quả cho xử lý thấp tầng.
| Toán tử | Ý nghĩa | Ví dụ | Kết quả |
|---|---|---|---|
& | AND | 5 & 1 | 1 |
| | OR | 5 | 1 | 5 |
^ | XOR | 5 ^ 1 | 4 |
~ | NOT | ~5 | -6 |
<< | Dịch trái | 5 << 1 | 10 |
>> | Dịch phải | 5 >> 1 | 2 |
>>> | Dịch phải không dấu | 5 >>> 1 | 2 |
Cả hai bit đều 1 → kết quả 1:
5 = 01011 = 0001--------& = 0001 → 15 & 1; // 16 & 3; // 2 (0110 & 0011 = 0010)Ít nhất một bit 1 → kết quả 1:
5 = 01011 = 0001--------| = 0101 → 55 | 1; // 56 | 3; // 7 (0110 | 0011 = 0111)Hai bit khác nhau → kết quả 1:
5 = 01011 = 0001--------^ = 0100 → 45 ^ 1; // 4// Ứng dụng: swap không cần biến tạmlet a = 5, b = 3;a ^= b; b ^= a; a ^= b;// a = 3, b = 55 << 1; // 10 (0101 → 1010) — nhân 25 >> 1; // 2 (0101 → 0010) — chia 2 (bỏ phần lẻ)
// Ứng dụng: nhân/chia nhanh cho lũy thừa của 28 << 2; // 32 (8 × 4)32 >> 3; // 4 (32 ÷ 8)Kiểm tra chẵn/lẻ
// Nhanh hơn moduloconst isOdd = n => (n & 1) === 1;isOdd(5); // trueisOdd(4); // falseFlags / Permissions
const READ = 0b001; // 1const WRITE = 0b010; // 2const EXEC = 0b100; // 4
let perms = READ | WRITE; // 3perms & READ; // 1 (truthy → có quyền)perms & EXEC; // 0 (falsy → không có)Cho phép thực hiện nhiều biểu thức trong cùng một dòng, nhưng chỉ giá trị của biểu thức cuối cùng được trả về.
let a = (1 + 2, 3 + 4);console.log(a); // 7 (chỉ lấy kết quả cuối)for (let i = 0, j = 10; i < j; i++, j--) { console.log(i, j);}// 0 10// 1 9// 2 8// 3 7// 4 6BigInt dùng để biểu diễn số nguyên rất lớn vượt quá giới hạn của kiểu Number ($2^53 - 1$).
Hoạt động tương tự như toán tử số học, nhưng cả hai toán hạng đều phải là BigInt.
const big = 9007199254740991n;console.log(big + 2n); // 9007199254740993nconsole.log(big * 2n); // 18014398509481982n// ❌ TypeError — không thể trộn BigInt và Number10n + 5; // TypeError!
// ✅ Ép kiểu trước10n + BigInt(5); // 15nNumber(10n) + 5; // 15BigInt chia cắt phần thập phân (giống chia nguyên):
7n / 2n; // 3n (không phải 3.5)-7n / 2n; // -3n// == cho phép so sánh khác kiểu10n == 10; // true10n === 10; // false (khác kiểu)
// So sánh lớn/nhỏ hoạt động bình thường10n > 5; // trueDùng để nối hoặc gán chuỗi.
| Toán tử | Ví dụ | Kết quả |
|---|---|---|
+ | 'Hello ' + 'World' | 'Hello World' |
+= | str += '!' | Gán thêm vào chuỗi hiện có |
let msg = "Hello";msg += " JavaScript!";console.log(msg); // "Hello JavaScript!"Cách hiện đại hơn để nối chuỗi:
const name = "An";const age = 25;
// ❌ Dùng +const s1 = "Tôi là " + name + ", " + age + " tuổi.";
// ✅ Dùng template literalconst s2 = `Tôi là ${name}, ${age} tuổi.`;| Nhóm | Toán tử | Ghi nhớ |
|---|---|---|
| Bitwise | & | ^ ~ << >> >>> | Thao tác bit — dùng cho flags, permission |
| Comma | , | Chỉ trả giá trị cuối — chủ yếu dùng trong for |
| BigInt | + - * / % ** (với n) | Không trộn với Number |
| String | + += | Ưu tiên template literal thay + |