2010-07-30 27 views

Trả lời

17

Các toán tử quan hệ (>=<=), thực hiện kiểu ép buộc (ToPrimitive), với một kiểu gợi ý của Number, tất cả các nhà khai thác quan hệ hiện có hành vi này .

Bạn có thể xem chi tiết bên trong của quy trình này trong The Abstract Relational Comparison Algorithm.

Mặt khác, Equals operator (==), nếu một toán hạng là null nó chỉ trả về true nếu người kia là một trong hai null hoặc undefined, không có loại ép buộc số được thực hiện.

null == undefined; // true 
null == null; // true 

Kiểm tra chi tiết bên trong của quy trình này trong The Abstract Relational Comparison Algorithm.

bài được khuyến nghị:

+0

OK. ">", "<" đánh giá null là 0. "==" thì không. Cảm ơn. – Eonil

+0

Điều thú vị khác là a> = b không được đánh giá là ((a> b) || (a == b)) nhưng như! (a = 0 không giống như> hoặc ==. – bschandramohan

2

Khi null được sử dụng trong thử nghiệm số, nó đánh giá là 0, giải thích trường hợp của bạn> và> = trường hợp.

== tinh vi hơn. Không chính thức, null không giống như số không, vì vậy nó có ý nghĩa.

+0

[This] (http://bclary.com/2004/11/07/#a-11.8) là một liên kết rất hữu ích để hiểu các bước được thực hiện trong việc sử dụng các toán tử này. Vẫn không giải thích được logic điên rồ, nhưng ... – Stephen

4

Các toán tử so sánh tương đối ngụ ý ngữ cảnh số, vì vậy trong các trường hợp đó (>, >=), null được chuyển thành số (0). Tuy nhiên,

Trong trường hợp ==, cả hai giá trị được coi là giá trị boolean và Javascript không nghĩ rằng null phải bằng bất kỳ giá trị "sai khác" nào. Thật kỳ cục. Thuật toán bình đẳng cho == có một loạt các trường hợp đặc biệt và null là một trong số đó. Chỉ có == cho chính nó và undefined.

0

Thú vị! Có vẻ như Javascript cần một số nhà khai thác danh tính mới như >==<==. Mặc dù tôi không chắc chắn rằng sẽ có ý nghĩa nhiều, cho các tác động số của ><.

này cung cấp cho các kết quả dự kiến ​​...

(null > 0 || null === 0);