Bỏ qua để đến nội dung

Bitwise & Misc Operators

Hoạ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ĩaVí dụKết quả
&AND5 & 11
|OR5 | 15
^XOR5 ^ 14
~NOT~5-6
<<Dịch trái5 << 110
>>Dịch phải5 >> 12
>>>Dịch phải không dấu5 >>> 12

Cả hai bit đều 1 → kết quả 1:

5 = 0101
1 = 0001
--------
& = 0001 → 1
5 & 1; // 1
6 & 3; // 2 (0110 & 0011 = 0010)

Kiểm tra chẵn/lẻ

// Nhanh hơn modulo
const isOdd = n => (n & 1) === 1;
isOdd(5); // true
isOdd(4); // false

Flags / Permissions

const READ = 0b001; // 1
const WRITE = 0b010; // 2
const EXEC = 0b100; // 4
let perms = READ | WRITE; // 3
perms & 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 6

BigInt 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); // 9007199254740993n
console.log(big * 2n); // 18014398509481982n
// ❌ TypeError — không thể trộn BigInt và Number
10n + 5; // TypeError!
// ✅ Ép kiểu trước
10n + BigInt(5); // 15n
Number(10n) + 5; // 15

Dù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 literal
const s2 = `Tôi là ${name}, ${age} tuổi.`;

NhómToá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 +