2013-06-07 2 views
8

Как проверить, является ли значение NaN? Я бы предпочел решение, которое может быть использовано в Clojure тоже без лишних вещей (поэтому я не хочу использовать внешнюю библиотеку, например, подчеркивание). Вот что я пробовалПроверить для NaN в 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))) 

ответ

18

Вы не должны сравнивать NaN - они всегда неравны. Вы должны быть в состоянии использовать в JavaScript встроенные функции IsNaN как

(js/isNaN x) 
2

Вы можете использовать функцию isNaN ЯШ:

(js/isNaN ..)

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)))) 
Смежные вопросы