خب! میدونید که isNaN یعنی چی! میگه که این چیزی که شبیه عدد (Number) هست واقعا عدده یا نه ؟
و اگر مقدار (value) مد نظر عدد نباشه (Not a Number or NaN) مقدار true برمیگردونه. حالا سوال اینه که تفاوت isNaN و Number.isNaN چیه ؟
تابع isNaN یک تابع Global هست و میتونی از هرجای برنامه صداش بزنی، به قطعه کد زیر توجه کن :
خب تا این جای کار همه چیز خوبه، ولی! به قطعه کد بعدی هم توجه کن :
همون طوری که میبینید isNaN برخی از رشته ها (String) رو به عنوان عدد (Number) در نظر میگیره و
مقدار false رو برمیگردونه ( به تفاوت isNaN('elham') و isNaN('38') توجه کن).
متد Number.isNaN در EcmaScript 2015#Number.isNaN برای حل این مشکلات اومد، چک میکنه که value یا مقداری که بهش پاس دادی NaN یا Not a Number هست و نوع داده ای اون مقدار Number هست نحوه عملکردش رو در قطعه کد زیر ببینید :
برای درک بهتر این موضوع، سومین مورد قطعه کد بالا رو بررسی میکنیم :
حالا که تفاوتشون رو متوجه شدیم چند تا نمونه از سوالهایی که شرکتهای مختلف توی مصاحبه هاشون از این مبحث میپرسن رو ببینیم :
نوع داده ای NaNچیست ؟
console.log(typeof NaN === "number");
// logs "true"
// NaN is an invalid number
نتیجه عبارت NaN === NaN چیست ؟
در مقایسه با خودش و هر چیز دیگه مقدار False رو برمیگردونه.
console.log(NaN === NaN);
// logs "false"
چرا isNaN("elham") === true اما isNaN("123") === false است ؟
وقتی مقداری به isNaN پاس داده میشه که نوع داده ای اون Number نیست اون مقدار به نوع Number تبدیل میشه (به نوعی به اجبار) و بعد تست میشه که آیا NaN هست یا نه.
در تصاویر زیر این مفهوم رو در عمل مشاهده میکنید :
اکه نکته دیگه مونده شما اضافه کنید!