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

Strict Equality Operator (===)

Toán tử === (strict equality) so sánh cả kiểu dữ liệu lẫn giá trị — không thực hiện bất kỳ chuyển đổi kiểu nào. Hai toán hạng chỉ bằng nhau khi cùng kiểu VÀ cùng giá trị.

"5" === 5; // false — string ≠ number
5 === 5; // true — cùng kiểu, cùng giá trị

Thuật toán Strict Equality Comparison rất đơn giản:

Nếu hai toán hạng khác kiểu, kết quả luôn là false — không hề có ép kiểu:

"5" === 5; // false — string ≠ number
0 === false; // false — number ≠ boolean
null === undefined; // false — null ≠ undefined
"" === 0; // false — string ≠ number

=== so sánh tham chiếu (reference), không phải nội dung:

const a = { name: "An" };
const b = { name: "An" };
const c = a;
a === b; // false — khác tham chiếu (hai object khác nhau trong bộ nhớ)
a === c; // true — cùng tham chiếu (c trỏ tới cùng object với a)

So sánhKết quảLý do
5 === 5✅ trueCùng kiểu, cùng giá trị
"5" === 5❌ falseKhác kiểu (string ≠ number)
true === 1❌ falseKhác kiểu (boolean ≠ number)
null === undefined❌ falseKhác kiểu
null === null✅ trueCùng kiểu, cùng giá trị
NaN === NaN❌ falseNgoại lệ IEEE 754
+0 === -0✅ trueXem như bằng nhau
{} === {}❌ falseKhác tham chiếu

// typeof luôn trả về string → dùng === an toàn
if (typeof x === "string") {
// x chắc chắn là string
}
if (typeof x === "undefined") {
// x chưa được khai báo hoặc undefined
}

Không ép kiểu

=== không bao giờ tự chuyển đổi kiểu dữ liệu

Khác kiểu = false

Hai giá trị khác kiểu → luôn false, không cần so sánh giá trị

Tham chiếu cho Object

Object/Array/Function so sánh theo tham chiếu, không phải nội dung

NaN ≠ NaN

NaN === NaN là false — dùng Number.isNaN() thay thế