如何检查值是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)))
答案 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 ))))