12

如何检查值是否为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)))
4

3 回答 3

22

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

(js/isNaN x)
于 2013-06-07T12:19:24.847 回答
3

你可以使用isNaNjs函数:

(js/isNaN ..)

于 2013-06-07T12:20:26.903 回答
2

意识到

(js/isNaN [1,2])

返回真。还有很多其他情况,js/isNaN 与预期不符。

如果您在浏览器中使用 underscore.js,则可以委托给 (.isNaN js/_ ..)。

否则,以下功能应该可以解决问题:

(defn isNaN [node]
  (and (= (.call js/toString node) (str "[object Number]"))
       (js/eval (str node " != +" node ))))
于 2013-08-24T15:11:15.493 回答