जावास्क्रिप्ट में निर्मित isNaN समारोह, है - के रूप में डिफ़ॉल्ट रूप से उम्मीद की जानी चाहिए - एक "गतिशील प्रकार ऑपरेटर"। इसलिए सभी मान जो (डीटीसी प्रक्रिया के दौरान) एक साधारण सच हो सकते हैं | जैसे झूठ"", " ", " 000"
, NaN नहीं हो सकता।
मतलब यह है कि आपूर्ति की गई तर्क पहले एक रूपांतरण से गुजरेंगे :
function isNaNDemo(arg){
var x = new Number(arg).valueOf();
return x != x;
}
स्पष्टीकरण:
फ़ंक्शन बॉडी की शीर्ष पंक्ति में, हम तर्क को एक नंबर ऑब्जेक्ट में सफलतापूर्वक परिवर्तित करने की कोशिश कर रहे हैं। और (द्वितीय), डॉट ऑपरेटर हम कर रहे हैं का उपयोग कर - अपने स्वयं के सुविधा के लिए - तुरंत बंद अलग करना, आदिम मूल्य बनाई गई वस्तु की।
दूसरी पंक्ति में, हम पिछले चरण में प्राप्त मूल्य ले रहे हैं, और इस तथ्य का लाभ है कि NaN ब्रह्मांड में किसी भी चीज के बराबर नहीं है, यहां तक कि खुद के लिए भी नहीं है, उदाहरण के लिए: NaN == NaN >> false
अंत में खुद के साथ इसकी (असमानता) तुलना करने के लिए ।
इस तरह से फ़ंक्शन रिटर्न तभी सही होगा , जब और केवल तभी, आपूर्ति की गई तर्क-वापसी, किसी ऑब्जेक्ट के लिए रूपांतरण का एक असफल प्रयास है, अर्थात, एक नंबर-एक नंबर; जैसे, NaN।
isNNstatic ()
हालांकि, एक स्टेटिक टाइप ऑपरेटर के लिए - यदि आवश्यक हो और जब जरूरत हो - हम एक बहुत सरल कार्य लिख सकते हैं जैसे:
function isNaNstatic(x){
return x != x;
}
और डीटीसी से पूरी तरह से बचें ताकि यदि तर्क स्पष्ट रूप से एक NaN नंबर नहीं है, तो यह गलत वापस आ जाएगा। निम्नलिखित में, निम्नलिखित के खिलाफ परीक्षण:
isNaNStatic(" x"); // will return false
क्योंकि यह अभी भी एक स्ट्रिंग है।
हालांकि:
isNaNStatic(1/"x"); // will of course return true.
उदाहरण के लिए होगाisNaNStatic(NaN); >> true
।
लेकिन इसके विपरीत isNaN
, isNaNStatic("NaN"); >> false
क्योंकि यह (तर्क) एक साधारण स्ट्रिंग है।
ps: isNaN का स्थिर संस्करण आधुनिक कोडिंग परिदृश्यों में बहुत उपयोगी हो सकता है। और यह बहुत अच्छी तरह से एक मुख्य कारण हो सकता है जो मैंने इसे पोस्ट करने के लिए अपना समय लिया।
सादर।