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 === NaNfalse — dùng Number.isNaN() thay thế