2013-02-20 97 views
1

爲什麼這兩個不同?爲什麼IsNaN(x)與x = NaN不同x = NaN

var x = NaN; //e.g. Number("e"); 
alert(isNaN(x)); //true (good) 
alert(x == NaN); //false (bad) 
+14

考慮'NaN === NaN // false'。鴨子不是兔子'鴨子!==兔子',但都不是_Number_,所以都是'NaN',因此'NaN'不能等於它自己,因此'=='和'==='必須返回'false'。 – 2013-02-20 17:39:36

+0

http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/ – Almo 2013-02-20 17:41:03

+0

想一想爲什麼他們首先需要一個'isNaN'函數。 – ChaosPandion 2013-02-20 17:41:27

回答

1

沒有等於NaN。任何比較將始終爲false

在嚴格和抽象比較算法中,如果類型相同,且操作數爲NaN,則結果爲false

如果Type(x)是號碼,然後

  • 如果xNaN,返回false
  • 如果yNaN,則返回false

在抽象的算法,如果類型是不同的,並且NaN是操作數,那麼另一個操作數最終會被裹挾到了一些之一,並把我們帶回上述情形。

+0

真的嗎? Infinity看起來像NaN一樣。 Infinity == Infinity怎麼樣?它如何迴歸真實? – allenhwkim 2013-02-20 18:38:14

+0

@ bighostkim:*「Infinity看起來像NaN一樣......」*我不明白你的意思。他們不一樣。 – 2013-02-20 18:40:30

+0

typeof Infinity是數字,與type of NaN相同。正如你所說,另一個操作數最終將被強制爲一個數字。 – allenhwkim 2013-02-20 18:47:26

1

的等式和不等式謂詞是無信令所以X = X返回false可以用來測試是否x是一個靜態NaN。

Source

這是IEEE定義的規則754,以便完全符合規範要求這種行爲。

0

下面的操作都將返回NaN

The divisions 0/0, ∞/∞, ∞/−∞, −∞/∞, and −∞/−∞ 
The multiplications 0×∞ and 0×−∞ 
The power 1^∞ 
The additions ∞ + (−∞), (−∞) + ∞ and equivalent subtractions. 
Real operations with complex results: 

The square root of a negative number 
The logarithm of a negative number 
The tangent of an odd multiple of 90 degrees (or π/2 radians) 
The inverse sine or cosine of a number which is less than −1 or greater than +1. 

以下操作的數字操作返回值。因此,typeof南是一個數字。 NaN是數學術語中未定義的數字。 ∞+(-∞)不等於∞+(-∞)。但是我們得到NaN是typeof,因爲它是由數字操作產生的。

wiki

+0

爲什麼downvote,傢伙?至少告訴我,以便我可以改善。 :| – ppsreejith 2013-02-20 17:49:00

+0

我沒有投票,但對我來說很明顯,你還沒有回答問題**爲什麼**。 – ChaosPandion 2013-02-20 17:57:39

+0

@ChaosPandion,不是很明顯嗎?以下操作返回數值操作的值,因此typeof Nan是一個數字。 NaN是數學術語中未定義的數字。 ∞+(-∞)不等於∞+(-∞)。但是我們知道NaN是typeof數字,因爲它是由數字操作產生的。這就是我寫的。 – ppsreejith 2013-02-20 18:02:34

相關問題