الهام زین‌الدینی
الهام زین‌الدینی
خواندن ۱ دقیقه·۳ سال پیش

تفاوت isNaN و Number.isNaN چیه ؟

خب! میدونید که 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 هست یا نه.

در تصاویر زیر این مفهوم رو در عمل مشاهده میکنید :

isNaN(
isNaN(
isNaN(
isNaN(


اکه نکته دیگه مونده شما اضافه کنید!



javascriptjsisnannumber isnanجاوااسکریپت
who reads these anyways? (also : Software engineer , Howdy)
شاید از این پست‌ها خوشتان بیاید