2010-10-18 39 views
4

AS3文檔指出,如果將字符串傳遞給parseInt而不是數字,它將返回NaN。然而,當我嘗試比較NaN編譯器給了我以下錯誤:將Actionscript 3中的parseInt與NaN進行比較

Warning: 1098: Illogical comparison with NaN. This statement always evaluates to false. 

的說法是真的。與NaN相比將始終返回false。我如何與NaN進行比較來檢測是否解析了NaN?

if(parseInt("test") == NaN) 
{ 
    // do something (never gets here) 
} 

回答

16

比較isNaN()功能。

+3

Sla額。當然。我現在記得在AS2年前我有同樣的問題。爲什麼不是parseInt文檔引用isNaN函數? – Luke 2010-10-18 21:21:34

8

使用isNaN()全局函數

if(isNaN(parseInt("test"))) 
{ 
    // do something 
} 
2

每個人都是正確的,使用isNaN()功能:

http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/package.html#isNaN()

我從來沒有真正喜歡這種方法。我更喜歡測試積極的東西。

但有趣的是,如果一個數是NaN那麼它將等同於自身:

var parsed_int:Number = parseInt("test"); 
if(parsed_int != parsed_int) 
    trace("NaN"); 

爲此,測試如果數等同於本身應該給你肯定的:

var parsed_int:Number = parseInt("123"); 
if(parsed_int == parsed_int) 
    trace("Number"); 

閱讀代碼時你的意圖不是很清楚,所以如果你使用它,一定要評論它。

或者你可以添加一個頂級函數:

function isNumber(num:Number):Boolean{ 
    return num == num; 
} 

並記下優化堅果那裏。內聯版本是最快的。

僅供參考:http://www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/package.html#parseInt()

+0

然而'isNaN'函數是自我記錄的。沒有評論解釋你爲什麼將一個值與自身進行比較,它看起來像是一段冗餘的代碼。 – 2010-10-18 21:57:31

+0

是的,但我總是覺得有趣的事情知道如何工作。另外,如果你只想做一些事情,如果parseInt返回一個數字,你最終得到像if(!isNaN(parseInt(「test」)))的代碼。不是一個數字嗎?在我看來,這只是醜陋而已。 – Joony 2010-10-19 08:19:37

+1

'NaN'不是一個單一的數字,而是一系列[特定格式的數字](https://en.wikipedia.org/wiki/IEEE_754-1985#NaN)。更重要的是,ECMA規範[明確禁止您](http://www.ecma-international.org/ecma-262/5.1/#sec-11.9.3)在比較中使用NaN:結果始終是錯誤的。 – 2016-12-15 15:06:44