2013-06-07 17 views
8

Come posso verificare se un valore è NaN? Preferirei una soluzione che possa essere usata anche in Clojure senza troppe cose extra (quindi non voglio usare una libreria esterna, come il trattino basso). Ecco cosa ho provatoVerifica NaN in ClojureScript

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

risposta

18

Non si dovrebbe confrontare NaN - sono sempre disuguali. Si dovrebbe essere in grado di utilizzare Javascript del built-in funzione isNaN come

(js/isNaN x) 
2

È possibile utilizzare isNaN js funzione:

(js/isNaN ..)

2

essere consapevoli del fatto che

(js/isNaN [1,2])

restituisce true . Ci sono altri molti casi in cui js/isNaN non corrisponde a quello che ci si aspetta.

Se si utilizza underscore.js nel browser, è possibile delegare a (.isNaN js/_ ..).

In caso contrario, la seguente funzione dovrebbe per il trucco:

(defn isNaN [node] 
    (and (= (.call js/toString node) (str "[object Number]")) 
     (js/eval (str node " != +" node))))