مقادیر NaN در جاوا اسکریپت — به زبان ساده



تعداد بازدید ها:
1

در جاوا اسکریپت یک مقدار خاص به نام NaN به معنی «not a number» وجود دارد که برای نشان دادن این که نتیجه یک محاسبه ریاضیاتی قابل نمایش نیست مورد استفاده قرار می‌گیرد. مقادیر NaN در جاوا اسکریپت زمانی ظاهر می‌شود که تابع‌های Math ناموفق باشند. به مثال زیر توجه کنید:


همچنین هنگامی که تابعی تلاش کند یک عدد را تجزیه کند با شکست مواجه می‌شود:


NaN موجب مسموم شدن همه تابع‌های ریاضیاتی دیگر می‌شود و در نهایت همه عملیات ریاضیاتی دیگر منجر به NaN می‌شوند:


تقسیم بر صفر

توجه داشته باشید که تقسیم بر صفر در جاوا اسکریپت، موجب بازگشت مقدار Infinity و نه NaN می‌شود:


دلیل این نتیجه به شیوه تعریف عددهای اعشاری در جاوا اسکریپت و به طور کلی‌تر در رایانه باز می‌گردد. به بیان خلاصه 1/0 همان حد 1/x است وقتی که x به صفر میل می‌کند. بنابراین 0/0 هیچ میان‌یابی معقولی ندارد و از این رو NaN است.

NaN کلاً به چه معنا است؟

NaN یک مشخصه شیء سراسری است. مقدار اولیه NaN به صورت Not-A-Number است.

مقادیر NaN

پیچیدگی در بررسی NaN

متأسفانه در هنگام بررسی NaN دو مشکل وجود دارد:

  1. type of NaN به صورت Number است.
  2. NaN با همه مقادیر دیگر در جاوا اسکریپت نابرابر است.

به مثال زیر توجه کنید:


اکنون سؤال این است که چگونه می‌توانیم بررسی کنیم یک مقدار NaN داریم که عملیات ریاضی را مختل کرده است؟

بررسی NaN از طریق برابری با خود

چنان که پیش‌تر اشاره کردیم، تنها و تنها NaN است که با خودش برابر نیست. در جاوا اسکریپت بهترین روش برای بررسی NaN بودن یک مقدار بررسی برابری آن با خود (self-equality) است.

از آنجا که NaN با خودش برابر نیست، NaN!= NaN همواره مقدار صحیح تولید می‌کند. البته این روش تست مقدار NaN در کد همواره خوانا نیست، بنابراین استفاده از یک کامنت یا ایجاد یک تابع پوششی ایده خوبی به نظر می‌رسد:


نکاتی در مورد ()Number.isNan

جاوا اسکریپت مدرن یک پیاده‌سازی برای بررسی NaN بودن مقدار به نام Number.isNan()‎ دارد که مطابق انتظار عمل می‌کند. به مثال زیر توجه کنید:


توجه داشته باشید که ()Number.isNaN از تابع ()isNaN متفاوت است. ()isNaN یک پیاده‌سازی قدیمی‌تر است که هدف اصلی آن بررسی این است که آیا یک مقدار می‌تواند به صورت عددی درآید یا نه. به توضیحات تکمیلی زیر توجه کنید:

در صورتی که مقدار در حال حاضر NaN باشد، یا اگر قرار باشد پس از کاهش یافتن به عدد، به صورت NaN درآید، ()isNaN مقدار صحیح بازگشت می‌دهد. به بیان دیگر اگر مقداری دریافت کند که می‌تواند به یک عدد کاهش یابد، ()isNaN مقدار true بازگشت خواهد داد.

()Number.isNaN تنها در صورتی مقدار true بازگشت می‌دهد که مقدار در حال حاضر NaN باشد.


بنابراین اگر از مرورگرهای قدیمی (به خصوص اینترنت اکسپلورر) پشتیبانی می‌کنید که ()Number.isNaN در آن‌ها وجود ندارد، در این صورت بهترین گزینه «بررسی با خود» (self-equality) است.

اگر این مطلب برای شما مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

==

به عنوان حامی، استارتاپ، محصول و خدمات خود را در انتهای مطالب مرتبط مجله فرادرس معرفی کنید.

telegram
twitter