2010-07-30 59 views
23

我應該如何理解這些?Javascript對比的問題(null> = 0)

null>0 
> false 

null==0 
> false 

null>=0 
> true 
+3

'空<= 0' ==也是如此。 – Oded 2010-07-30 14:25:04

+0

什麼解釋器/瀏覽器? – 2010-07-30 14:31:36

+0

哇............ – Eonil 2010-07-30 14:32:19

回答

17

關係運算符(>=<=),進行強制類型轉換(ToPrimitive),並使用一個提示類型的Number,所有的關係目前運營商有這種行爲。

您可以在The Abstract Relational Comparison Algorithm中看到此過程的內部細節。

在另一方面,Equals operator==),如果操作數是null它只返回true如果對方是要麼nullundefined,沒有數字的類型強制製成。

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

檢查The Abstract Relational Comparison Algorithm中此過程的內部細節。

推薦的文章:

+0

行。 「>」,「<」將null評估爲0.「==」不會。謝謝。 – Eonil 2010-07-31 07:44:36

+0

其他有趣的事情是a> = b不被評估爲((a> b)||(a == b)),而是作爲! (a = 0與>或==不相同。 – bschandramohan 2014-06-11 04:50:09

2

當在數字展開中使用null時,它將評估爲0,這將解釋您的>和> =個案。

==比較微妙。非正式地說,null與零不一樣,所以它有道理。

+0

[This](http://bclary.com/2004/11/07/#a-11.8)是理解使用這些操作符的步驟的非常有用的鏈接。仍然沒有解釋瘋狂的邏輯,但是...... – Stephen 2010-07-30 14:29:54

4

相對比較運算符意味着數字上下文,因此在這些情況下(>,>=),null被轉換爲數字(零)。

然而,在==的情況下,兩個值都被視爲布爾值,並且Javascript不認爲null應該與任何其他「falsy」值相等。這很奇怪。 ==的等號算法有許多特殊情況,而null就是其中之一。它本身只有==undefined

0

有趣!似乎Javascript需要一些新的身份運營商,如>==<==。雖然我不確定這會有多大意義,因爲><的數字含義。

這給了預期的結果...

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