Kể từ ngày được tích hợp trong các đối tượng, và không phải primitives, kiểm tra bình đẳng được thực hiện bằng cách sử dụng các tham chiếu đối tượng.
Trong trường hợp này, đối tượng a
và b
không phải là cùng một đối tượng và do đó thử nghiệm không thành công.
Bạn có thể xem tương tự sử dụng
var a = new String("a");
var b = new String("a");
alert(a == b); //false
Bằng cách sử dụng .getTime
hoặc .valueOf
bạn đang chuyển đổi giá trị các đối tượng vào một nguyên thủy, và chúng được luôn so sánh bằng giá trị chứ không phải là bằng cách tham khảo.
Nếu bạn muốn làm một so sánh theo giá trị của hai thời điểm đó cũng là một cách mơ hồ hơn để làm điều này
var a = new Date(2010, 10, 10);
var b = new Date(2010, 10, 10);
alert(+a == +b); //true
Trong trường hợp này +
hành unary buộc động cơ javascript để gọi các đối tượng valueOf
phương pháp - và vì vậy nó là hai nguyên thủy đang được so sánh.
Nguồn
2010-05-22 16:29:04
Đây là một hack thú vị, cảm ơn bạn! – Art
Không chắc chắn tôi muốn gọi nó là một hack thực sự. –
Chỉ để chắc chắn - tôi đang đề cập đến câu lệnh "+ a == + b". – Art