Các giá trị non-primitive, như các object (bao gồm cả hàm và mảng) được giữ bởi tham chiếu, vì vậy cả hai phép so sánh "=="và "===" sẽ chỉ kiểm tra xem các tham chiếu có khớp nhau hay không, chứ không phải kiểm tra bất kỳ điều gì về các giá trị cơ bản.
Ví dụ: theo mặc định, mảng được ép thành chuỗi bằng cách chỉ cần nối tất cả các giá trị bằng dấu phẩy (,) ở giữa. Vì vậy, hai mảng có cùng nội dung sẽ không là true khi so sánh bằng ==:
var a = [1,2,3];
var b = [1,2,3];
var c = "1,2,3";
a == c; // true
b == c; // true
a == b; // false
Để deep-comparison các object, hãy sử dụng các lib bên ngoài như deep-equal hoặc triển khai một thuật toán của riêng bạn.