JavaScript-এ (MongoDB শেলেও) যদি কোনো ভেরিয়েবল undefined থাকে এবং সেটির সাথে সংখ্যা যোগ করা হয়, তবে ফলাফল হবে NaN (Not a Number)। এটি একটি スペシャル নামারিক ভ্যালু যা অমান্য গাণিতিক অপারেশনের ফলাফল বোঝায়।
কেস ১: সরাসরি undefined যোগ করা
> var result = 10 + undefined; > print(result);
আউটপুট:
NaN
কেস ২: অনির্ধারিত (undeclared) ভেরিয়েবল যোগ করা
> var value; > var value1 = 10; > var result = value1 + value; > result
আউটপুট:
NaN
value ডিক্লেয়ার করা হলেও মান অসাইন করা হয়নি, তাই সেটি undefined।
কেন NaN হয়?
- JavaScript-এ
undefinedএকটি প্রিমিটিভ ভ্যালু যা "মান অনুপস্থিত" বোঝায়। - গাণিতিক অপারেশন (+, -, *, /)
undefinedএর সাথে করলে JavaScript ইমপ্লিসিটলিundefined-কেNaN-এ কনভার্ট করে। Number(undefined)===NaN।
NaN চেক করা
> isNaN(result) true > Number.isNaN(result) true
Number.isNaN() ব্যবহার করা ভালো (গ্লোবাল isNaN() স্ট্রিংও কনভার্ট করে চেক করে, যা কনফিউশন তৈরি করতে পারে)।
প্রতিরোধ (Prevention)
- ভেরিয়েবল ডিক্লেয়ার করার সাথে সাথেই ডিফল্ট মান দিন:
var value = 0;। - অপারেশন করার আগে চেক করুন:
if (value !== undefined) { ... }। Number(value) || 0প্যাটার্ন ব্যবহার করুন (0 বা ফলসি ভ্যালু হলে ০ ব্যবহার করবে)।- MongoDB Aggregation-এ
$ifNullবা$condব্যবহার করুন।
মূল পয়েন্টসমূহ
undefined + number = NaN।NaNহলো "Not a Number" — একমাত্র মান যা নিজের সাথে সমান নয় (NaN !== NaN)।- MongoDB শেল JavaScript ইঞ্জিন (V8/SpiderMonkey) ব্যবহার করে, তাই একই আচরণ।
- এগরিগেশন পাইপলাইনে
$addঅপারেটরnullবা মিসিং ফিল্ডকে ০ ধরে না, এরর দেয় বা null রিটার্ন করে —$ifNullব্যবহার করুন।