2012-07-23 147 views
12

可以告訴我爲什麼下面的代碼在JavaScript中返回true?爲什麼(true> null)在JavaScript中總是返回true?

console.log(true > null); //returns true 
+14

是的,因爲null是僞造表達式(然後* false *),比較運算符會將其轉換爲_number_(然後爲true = 1和false = 0)。 – 2012-07-23 14:41:30

+2

** @阿德里亞諾**發佈它的答案就是這樣! – elclanrs 2012-07-23 14:42:11

+0

http://stackoverflow.com/questions/801032/null-object-in-javascript – diEcho 2012-07-23 14:42:20

回答

13

null是像在這種情況下false,至極是0爲數字。 true1作爲一個數字。

10大(>)。

+0

感謝您的回答。我想知道爲什麼是null === 0 false?然後我意識到它需要被強制。所以對於那些需要絕對證明的人來說,嘗試+ null === 0,其結果爲真,證明null確實被強制爲0.只是認爲這可能有助於其他人。 – GrantVS 2013-10-15 11:16:54

2

可能是因爲true = 1其中null = 0

7

它們被轉換成數字,null0true1

http://ecma-international.org/ecma-262/5.1/#sec-11.8.5

如果情況並非如此,這兩個類型(PX)是字符串,並且 類型(py)是字符串,然後

  1. NX是調用ToNumber(PX)的結果。因爲pxpy 是原始值評估順序並不重要。
  2. ny是調用ToNumber(py)的結果。
Number(null) //0 
Number(true) //1 
0

的代碼不正確,你需要做的:

console.log(true > typeof null); 
+1

你爲什麼認爲這是不正確的? – Esailija 2012-07-23 15:19:39

2

的JavaScript做了很多類型強制的背景和大量的結果,你會發現AREN」 t很有用(見http://wtfjs.com/)。

在這種情況下,被強制爲1的真值大於被強制爲0的空值。由於1大於0,結果爲真。

如果操作數中的一個是布爾值,布爾操作數轉換爲 1,如果它是真實的,0,如果它是假的。

MDN

0

比較運算符「>」強制它的左側和右側轉換爲數字。 Number(true)是1,Number(null)是0,所以paitance中的內容被取爲「1> 0」,結果總是爲真。

1

後面發生的事情是關係運算符(在這種情況下爲>)在執行比較之前執行類型強制轉換。在執行ToPrimitive時,true被強制爲1,null爲0。 您可以在此處查看操作員實際工作方式的詳細信息here

相關問題