যদিও NaN মানে হচ্ছে Not a Number, বাট তারপরেও এটার টাইপ দেখতে গেলে দেখা যায় এটাকে “number” টাইপ দেখানো হচ্ছেঃ
typeof NaN === "number"
// true
আপনারা যদি এখানে ইকমাস্ক্রিপ্ট এর স্পেসেসিফিকেশন দেখেন, তাহলে দেখবেন NaN কে এখানে নাম্বার টাইপ হিসেবে উল্লেখ করা হয়েছে।
NaN হচ্ছে মূলত স্পেসেফিক টাইপের কিছু ভ্যালু যেগুলোকে আমাদের জানাশোনা, অলরেডি আছে, রিয়েল নাম্বার দিয়ে প্রকাশ করতে পারি না। আমাদের নিউমিরেকেলি অনেক নাম্বারই শতভাগ প্রকাশ করা যায় না বিভিন্ন লিমিটেশন এর কারণে(যেমন পাই এর মান), রাউন্ড করে প্রকাশ করতে হয়। NaN ও এরকম স্পেসেফিক কিছু ক্ষেত্রে ইউজ হয়।
আবার আরেকটা জিনিস খেয়াল করবেন যে একটা NaN আরেকটা NaN এর সমানও দেখায় নাঃ
NaN === NaN
// false
এটার মূলত কারণ হচ্ছে এই প্রকাশ করা যায় না ভ্যালুগুলো অ্যাকচুয়ালি ডিফারেন্ট হতে পারে, তাই আপনি হলফ করে বলতে পারবেন না একটা আরেকটার সমান। সেজন্যেই মূলত এখানে false দেখানো হয়েছে। সেইম গ্রেটার দেন, লেস দেন, কম্পারিজন করতে গেলেও দেখবেনঃ
NaN < NaN
// false
NaN > NaN
// false
NaN <= NaN
// false
NaN >= NaN
// false
সবই false , তবে এরা ডিফারেন্ট কিনা সেটা চেক করলে দেখবেন আবার true ই দেখাচ্ছেঃ
NaN !== NaN
// true
তবে মজার ব্যাপার হলো এই NaN এর আইডিয়াটা কিন্তু জাভাস্ক্রিপ্টের ক্ষেত্রেই ইউনিক কোন বিষয় না। এটা অ্যাকচুয়ালি কম্পিউটার সাইন্সেরই কমন একটা প্রিন্সিপ্যাল।
NaN ওরফে Not a Number হচ্ছে নিউমেরিক ডেটা টাইপের একটা মেম্বার যেটা প্রকাশ করা যায় না এমন ভ্যালু প্রকাশে ব্যবহৃত হয়। মানে অনেকরকম ভ্যালু প্রকাশেই এটা ব্যবহার করা হতে পারে।
যারা টুকটাক ম্যাথ পারেন তারা অবশ্যই জানেন জিরো কে জিরো দিয়ে ভাগ করলে ফলাফল হচ্ছে আনডিফাইন্ড বা রিয়েল নাম্বার দিয়ে প্রকাশ করা যায় না, সেক্ষেত্রেই কিন্তু এই NaN ব্যবহৃত হয়ঃ
0 / 0
// NaN
তারপর একটা নেগেটিভ নাম্বারের স্কয়ার রুটও রিয়েল নাম্বার দিয়ে প্রকাশ করা যায় না, সেক্ষেত্রে এটাও NaN দিয়ে প্রকাশ করা হয়ঃ
Math.sqrt(-13)
// NaN
তারপরে খেয়াল করেন উপরের দুইটা দুইরকম ম্যাথের ফলাফল, বাট সেই সেইম NaN দিয়েই প্রকাশ করা হচ্ছে। কিন্তু 0 / 0 কিন্তু তাই বলে Math.sqrt(-13) এর সমান না।
চাইলে কিন্তু এদের দুইটার ক্ষেত্রে দুইরকমের জিনিসও ইউজ করা যেতো, বাট এরকম কয়টার ক্ষেত্রে করবেন? সবার জন্য আলাদা আলাদা করতে গেলে ব্যাপারটা একদমই আউট অব কন্ট্রোলে চলে যেতো। তাই এসব ব্যাতিক্রমি ভ্যালু প্রকাশের জন্য NaN ব্যবহার করা হয়।
এ কারণেই NaN নিজে একটা “number” টাইপ আর নিজে নিজের সমান না, বড়ও না, এমনকি ছোটও না।