2013-06-07 6 views
8

में NaN के लिए जांचें मैं कैसे जांच सकता हूं कि कोई मान NaN है या नहीं? मैं एक समाधान पसंद करूंगा जिसका उपयोग क्लोजर में बिना अतिरिक्त सामान के भी किया जा सकता है (इसलिए मैं अंडरस्कोर जैसी बाहरी लाइब्रेरी का उपयोग नहीं करना चाहता)। वे हमेशा असमान हो - यहाँ मैं क्या करने की कोशिश कीक्लोजरस्क्रिप्ट

(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 की तुलना नहीं करनी चाहिए। आप की तरह

(js/isNaN x) 
2

उपयोग करने के लिए जावास्क्रिप्ट में निर्मित isNaN समारोह दिए जाने पर आप isNaN js समारोह का उपयोग कर सकते सक्षम होना चाहिए:

(js/isNaN ..)

2

ध्यान रखें कि

(js/isNaN [1,2])

रिटर्न सच । ऐसे कई अन्य मामले हैं जहां जेएस/एनएएनएन किसी की अपेक्षा के अनुरूप नहीं है।

यदि आप ब्राउज़र में underscore.js का उपयोग कर रहे हैं, तो आप इसके बजाय (.isNaN js/_ ..) को प्रतिनिधि कर सकते हैं।

अन्यथा, निम्न कार्य करना चाहिए चाल करने के लिए:

(defn isNaN [node] 
    (and (= (.call js/toString node) (str "[object Number]")) 
     (js/eval (str node " != +" node)))) 
संबंधित मुद्दे