i love javascript

جاوااسکریپت به روایت آمیرزا: خاص‌ها!

همونطور که قبلا گفتم، دوباره کوله بار سفر بستم و افتادم تو مسیر جاوااسکریپت. دوست دارم چیزهای جالبی که تو این مسیر باهاشون آشنا میشم رو با شما دوستان خوبم به اشتراک بذارم. امروز میخوام راجع به خاص‌های جاوااسکریپت بگم، که همون اول راه جلوم وایسادن و باهاشون آشنا شدم: اعداد خاص و مقادیر خاص!

اعداد خاص!

تو جاوااسکریپت همه چی درمورد اعداد عادی و میزونه. البته سه تا عدد خاص هم وجود دارند، یا بهتره بگیم سه مقدار خاص از نوع عدد:

Infinity و Infinity- که همون مثبت و منفی بینهایت هستند. قاعدتا اگه با چیزی جمع یا کم بشن باز هم همون بینهایتی که هستند باقی میمونن.

مقدار خاص سوم هم چیزی نیست جز NaN که مخفف Not a Number هست. گرچه داد میزنه من عدد نیستم، ولی گولش رو نخورید، چون از جنس اعداد هست. چرا؟ چون هر عملیاتی روی اعداد که نتونه منجر به یک نتیجه‌ی بامعنی بشه، NaN رو برمیگردونه. اینطوری میشه گفت: شاید NaN عدد نباشه، اما حاصل از عملیاتهای ناموفق عددی هست. با دستور typeof میتونید نوع متغیرها رو چک کنید، اگه این دستور رو برای NaN اجرا کنید میبینید که number رو برمیگردونه:

typeof NaN;
          // number

و اما یک نکته دیگه درمورد NaN، و اون اینکه NaN هیچوقت برابر خودش نیست!!! یعنی چی؟ یعنی عبارت منطقی

NaN == NaN

نتیجه‌ای جز false در پی نداره. چون NaN حاصل یک عملیات ریاضی بی‌معنیه، که لزوما نباید برابر نتیجه‌ی عملیات‌های بی‌معنیِ دیگه‌ای باشه! تونستم منظورم رو برسونم؟

راستی، یه تابع هم داریم به اسم ()isNaN که چک میکنه یه متغیر عدد نیست یا هست (دقت کنید! نگفتم عدد هست یا نه، گفتم عدد نیست یا هست). منظور اینه که اگه یه عدد به صورت رشته متنی هم ذخیره شده باشه، این تابع میتونه برامون تشخیصش بده. اگه متغیری که به ورودی این تابع میدیم، به هیچ وجه من الوجوه عدد نباشه، این تابع مقدار true رو برمیگردونه، یعنی این متغیر عدد نیست یا به قول فرنگی‌ها Not A Number. مثالهای زیر میتونن کمک کنن که راحتتر با کارکرد این تابع آشنا بشیم:

var num = '2016';
typeof num;
          // string
 
isNaN(num);
          // false
 
isNaN(2016);
          // false
 
var b = '2016March';
isNaN(b);
          // true

مقادیر خاص!

تو جاوااسکریپت دو مقدار خاص هم داریم. این مقادیر چیزی نیستن جز undefined و null. این دو تا مقدار خیلی شبیه بهم هستند، اول که دیدمشون فکر کردم که داداش‌های دو قلو هستن، اما بیشتر که دقت کردم دیدم تفاوتهایی با هم دارند که دونستنش خالی از لطف نیست!

اگه متغیری تعریف کنیم که بهش مقداری نسبت نداده باشیم، یا بخواهیم مقدار متغیری رو بگیریم که اصلا تعریفش نکردیم، با مقدار undefined مواجه میشیم.

var myVar;
typeof myVar;
          // undefined
 
typeof myLovelyVar
          // undefined

تفاوت اول undefined با null اینه که خود حضرت جاوااسکریپت به متغیرهای تعریف نشده مقدار undefined میده و اصلا کاری به کار null نداره. در واقع مقدار null رو کاربر خودش میتونه به متغیری نسبت بده وگرنه جاوااسکریپت خودش تو اینجور واقع فقط میره سراغ برگردوندون undefined.

اما تفاوت اساسی این دو مقدار اینه که undefined واقعا هیچی نیست و اگه تو یه عملیات ریاضی استفاده بشه، نتیجه‌ای بی‌معنی تولید میکنه! اما null در عملیاتها نقش صفر رو بازی میکنه و عملیاتهای ریاضی رو بی‌معنی نمیکنه و به فنا نمی‌بره! به مثالهای زیر توجه کنید:

result1 = 2 + null;
          // ۲
 
result2 = 5 * null;
          // ۰
 
result3 = 2 + undefined;
          // NaN

توجه داشته باشید که null فقط در عبارات ریاضی نقش صفر رو بازی میکنه، نه جاهای دیگه! در هر صورت، از نظر منطقی null برابر undefined هست، اما null برابر صفر نیست!

null == undefined;
          // true
null == 0;
          //false

این هم از مشاهدات من از اول راه جاوااسکریپت. گرچه همیشه این مقادیر خاص رو دور و اطرافم میدیدم، اما تا بحال به جزئیاتشون توجه نکرده بودم. در ادامه‌ی راهم اگه بازهم با چیزهای جالب رو به رو شدم سعی میکنم با شما دوستان عزیزم به اشتراک بذارم.

قربان شما،

آمیرزا

آمیرزا

یه برق‌خونده‌ی علاقه‌مند به برنامه‌نویسی

3 دیدگاه برای “جاوااسکریپت به روایت آمیرزا: خاص‌ها!

  1. از مقاله زیبات ممنونم آمیرزای عزیز بازهم منتظر مقاله های جاوااسکریپتی بیشتری هستیم این زبان اینقدر کاربردش زیاد شده که به حق نمیشه ازش گذشت مخصوصا در دنیای وب و با زبان زیبا و ساده شما راحت تر میشه سر از این زبان بی شاخ و دم در آوردم

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *