2013-06-07 6 views
8

値がNaNであるかどうかを確認するにはどうすればよいですか?私はClojureで余分なものがなくても使える解決策を望んでいるので(アンダースコアのような外部ライブラリを使いたくない)ここで私が試したものですClojureScriptでNaNを確認する

(number? js/NaN) ;=> true, well I'd expect false 
(= js/NaN (js/parseInt "xx")) ;=> false 
(= js/NaN js/NaN) ;=> false, even worse 

; This is the best I could come up with 
(defn actual-number? 
    [n] 
    (or (> 0 n) (<= 0 n))) 

答えて

18

あなたはNaNを比較してはいけません - それらは常に不等です。あなたはisNaN JS関数を使用することができます

(js/isNaN x) 
2

のようなビルトインのJavaScriptますisNaN関数を使用することができるはずです。

(js/isNaN ..)

2

は注意してください

(js/isNaN [1,2])

trueを返しています。 js/isNaNが期待するものに対応しない他の多くのケースがあります。

ブラウザでunderscore.jsを使用している場合は、代わりに(.isNaN js/_ ..)に委任できます。

そうでない場合は、以下の機能がすべきトリックへ:

(defn isNaN [node] 
    (and (= (.call js/toString node) (str "[object Number]")) 
     (js/eval (str node " != +" node)))) 
関連する問題