Mọi thứ trong JS là một đối tượng. Tôi luôn biết điều đó, và tôi hoàn toàn hiểu điều đó. Tôi biết lý do tại sao {} !== {}
. Đó là hai đối tượng khác nhau. Giống như bạn đã viết ra new Object() == new Object()
.Trong JavaScript, tại sao không có bất kỳ đối tượng nào bằng nhau, ngoại trừ chuỗi?
Một số ví dụ khác:
{} == {} // => false
[] == [] // => false
// ==// // => false
new String() == new String() // => false
Nhưng, Strings là những đối tượng quá (đó là lý do tại sao bạn có thể làm ''.replace()
và mở rộng chúng), vậy tại sao không làm việc này:
'' == '' // => true
Rõ ràng nó muốn là một nhức đầu rất lớn để so sánh hai chuỗi nếu điều này không làm việc, nhưng điều này có vẻ không phù hợp với phần còn lại của ngôn ngữ. Nội bộ, những gì đang xảy ra? Nó chỉ là một lần duy nhất hay có một số khái niệm khác đằng sau điều này?
Hãy xem xét điều này: [Sự khác biệt giữa loại chuỗi javascript và đối tượng chuỗi?] (Http://stackoverflow.com/questions/2051833/difference-between-the-javascript-string-type-and-string- đối tượng) – Blender
http://bclary.com/2004/11/07/#a-11.9.3 – moonshadow
"Mọi thứ trong JS là một đối tượng" theo nghĩa là ngay cả chuỗi nguyên thủy "kế thừa" từ nguyên mẫu Chuỗi. Nhưng JS có các giá trị "nguyên thủy" không được so sánh như các đối tượng. Bạn có thể kiểm tra kiểu cơ bản này với toán tử 'typeof'. Và thông số cho '===': http://es5.github.io/#x11.9.6 –