在ClojureScript中检查NaN

时间:2013-06-07 12:17:51

标签: clojure nan clojurescript

如何检查值是NaN?我更喜欢一种可以在Clojure中使用的解决方案,而且没有太多额外的东西(因此我不想使用外部库,例如下划线)。这是我试过的

(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)))

3 个答案:

答案 0 :(得分:20)

你不应该比较NaN的 - 他们总是不平等。您应该能够使用javascript的内置isNaN函数,如

(js/isNaN x)

答案 1 :(得分:2)

您可以使用isNaN js功能:

(js/isNaN ..)

答案 2 :(得分: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 ))))