爲什麼這兩個不同?爲什麼IsNaN(x)與x = NaN不同x = NaN
var x = NaN; //e.g. Number("e");
alert(isNaN(x)); //true (good)
alert(x == NaN); //false (bad)
爲什麼這兩個不同?爲什麼IsNaN(x)與x = NaN不同x = NaN
var x = NaN; //e.g. Number("e");
alert(isNaN(x)); //true (good)
alert(x == NaN); //false (bad)
沒有等於NaN
。任何比較將始終爲false
。
在嚴格和抽象比較算法中,如果類型相同,且操作數爲NaN
,則結果爲false
。
如果Type(x)是號碼,然後
- 如果
x
是NaN
,返回false
。- 如果
y
是NaN
,則返回false
。
在抽象的算法,如果類型是不同的,並且NaN
是操作數,那麼另一個操作數最終會被裹挾到了一些之一,並把我們帶回上述情形。
真的嗎? Infinity看起來像NaN一樣。 Infinity == Infinity怎麼樣?它如何迴歸真實? – allenhwkim 2013-02-20 18:38:14
@ bighostkim:*「Infinity看起來像NaN一樣......」*我不明白你的意思。他們不一樣。 – 2013-02-20 18:40:30
typeof Infinity是數字,與type of NaN相同。正如你所說,另一個操作數最終將被強制爲一個數字。 – allenhwkim 2013-02-20 18:47:26
下面的操作都將返回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:
爲什麼downvote,傢伙?至少告訴我,以便我可以改善。 :| – ppsreejith 2013-02-20 17:49:00
我沒有投票,但對我來說很明顯,你還沒有回答問題**爲什麼**。 – ChaosPandion 2013-02-20 17:57:39
@ChaosPandion,不是很明顯嗎?以下操作返回數值操作的值,因此typeof Nan是一個數字。 NaN是數學術語中未定義的數字。 ∞+(-∞)不等於∞+(-∞)。但是我們知道NaN是typeof數字,因爲它是由數字操作產生的。這就是我寫的。 – ppsreejith 2013-02-20 18:02:34
考慮'NaN === NaN // false'。鴨子不是兔子'鴨子!==兔子',但都不是_Number_,所以都是'NaN',因此'NaN'不能等於它自己,因此'=='和'==='必須返回'false'。 – 2013-02-20 17:39:36
http://javascriptweblog.wordpress.com/2011/02/07/truth-equality-and-javascript/ – Almo 2013-02-20 17:41:03
想一想爲什麼他們首先需要一個'isNaN'函數。 – ChaosPandion 2013-02-20 17:41:27