آشنایی با دیتا تایپ عددی در زبان برنامه نویسی جاوا اسکریپت


اعداد در جاوا اسکریپت به صورت اعشاری 64 بیتی ذخیره می شوند. معنی این جمله آن است که جاوا اسکریپت می تواند اعدادی بین 5e-324 (یک 5- با 324 صفر جلوی آن) تا 1.7976931348623157e+308 (اعشار این عدد را 308 رقم به راست منتقل کنید تا بزرگی آن را درک کنید) را در خود ذخیره کند.

برای جاوا اسکریپت فرقی نمی کند که اعداد شما صحیح باشند و یا اعشاری؛ جاوا اسکریپت برخلاف اکثر زبان های برنامه نویسی، برای ذخیره ی انواع مختلف عددی، نیاز به تعریف نوع داده ای جداگانه ندارد. در اکثر زبان ها، اعداد صحیح مثبت و منفی (که به آن ها Integer گفته می شود) یا اعداد اعشاری (Float) می بایست به طور جداگانه تعریف شوند، اما جاوا اسکریپت این گونه نیست.

اما آیا جاوا اسکریپت می تواند اعداد خیلی بزرگی که امکان دارد ما با آن سر و کار داشته باشیم را به درستی ذخیره کند؟ اصلاً بزرگترین عددی که جاوا اسکریپت می تواند شناسایی کند، چه عددی است؟ جواب این پاسخ در زیر آمده است:

179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

پس به احتمال زیاد، جاوا اسکریپت می تواند از پس کارهای ما بر بیاید! زمانی که یک متغیر عددی را در جاوا اسکریپت تعریف می کنیم، می بایست از تمامی اجزای زیر استفاده کنیم:

- کلمه ی کلیدی var
- نامی که می خواهیم برای متغیر درنظر بگیریم
- عملگر تخصیص ( = )
- مقدار آن (که می تواند یک عدد و یا معادله ای که به یک عدد ختم می شود، باشد)
- یک semicolon (سمیکالِن یا نقطه ویرگول)

برای نمونه، عبارات زیر، همگی به درستی یک متغیر عددی را تعریف کرده اند:

var numberOfCats = 9;
var speedOfPride = 110;
var howManyBiscuits = 6;

فانکشنی به نام Number
یکی از فانکشن هایی که به طور پیش فرض در زبان جاوا اسکریپت وجود دارد، فانکشنی به نام Number است. به کمک این فانکشن، می توان هر مقدار یا Value یی را به یک عدد معادل آن تبدیل کرد. برای این کار، تنها لازم است که مقدار مورد نظر (یا متغیری که آن مقدار را دارد) را در بین دو پرانتز گذاشته و قبل از آن، فانکشن Number را فراخوانی کنیم. فانکشن Number می تواند 4 نوع خروجی متفاوت تولید کند:

1- اعدادی که به شکل String (استرینگ یا رشته های متنی) ذخیره شده اند، به کمک این فانکشن به عدد تبدیل می شوند تا بتوان از آن ها در محاسبات استفاده کرد (این نوع داده ای در جلوتر توضیح داده خواهد شد):

Number("42"); //returns the number 42

2- متون و حروفی (استرینگ) که نمی توان آن ها را به عدد تبدیل کرد، پس از قرار گرفتن در فانکشن Number، عبارت NaN را به عنوان خروجی چاپ می کنند. این عبارت، مخفف "Not A Number" یا "غیر عددی" است:

Number("eggs"); //returns NaN

3- مقدار Boolean (بولیَن) true، خروجی 1 را به ما نمایش می دهد (این نوع داده ای در جلوتر توضیح داده خواهد شد.):

Number(true);	//returns 1

4- مقدار بولیَن false، خروجی 0 را نمایش خواهد داد:

Number(false); //returns 0

فانکشنی به نام ()parseInt
در حقیقت، جاوا اسکریپت تمامی اعداد را به صورت اعداد اعشاری می بیند، یعنی حتی اعداد صحیحی مثل 10، برای جاوا اسکریپت به شکل 10.00 هستند که رقم پس از اعشار آن ها، بی تأثیر است. با این حال، ما می توانیم با استفاده از فانکشن ()parseInt، از جاوا اسکریپت بخواهیم که فقط بخش صحیح و غیر اعشاری عدد -که به آن Integer (اینتجر یا عدد صحیح) گفته می شود- را در نظر بگیرد و هر چه بعد از اعشار قرار دارد را حذف کند:

parseInt(100.33); //returns 100

فانکشن دیگری به نام ()parseFloat
با کمک فانکشن ()parseFloat می توانیم به جاوا اسکریپت بگوییم که یک استرینگ را به صورت اعشاری در نظر بگیرد اگرچه فانکشن ()Number نیز همین کار را انجام می دهد:

parseFloat("100.33"); //returns 100.33

این فانکشن جاوا اسکرپیت تشخیص می‌دهد که آیا اولین کاراکتر استرینگ ورودی یک عدد است یا خیر. اگر عدد بود، استرینگ مد نظر اصطلاحاً Parse (پارس به معنی تحلیل) می‌شود تا به پایان عدد برسد و آن عدد را باز می گرداند:

parseFloat("40 years");	//returns 40

توجه داشته باشیم که اگر اولین کاراکتر یک عدد نباشد، خروجی این فانکشن NaN است و آن عدد را باز می گرداند:

parseFloat("I am 20");	//returns NaN

حالا شما می توانید عددها و فانکشن هایی که الان مرور کردیم را آزمایش کنید. پیشنهاد می کنیم، نمونه های زیر را در کنسول جاوا اسکریپت کروم امتحان کنید تا نتیجه ی آن ها را ببینید.

نکته
با فشردن کلیدهای Ctrl + Shift + J در کروم، می توانید مستقیماً وارد کنسول جاوا اسکریپت شده و کدها را امتحان کنید.
1 + 1
3 * 3
parseFloat("839");
parseInt(146.33);
parseInt("33.55555");
12 + "12"
"12" + 12
"11" * 2
هشدار
متغیرها و مقادیر عددی می بایست بدون کوتیشن ها (" ") تعریف شوند. عبارت "10" با عدد 10 یکسان نیست؛ این عبارت، یک String (استرینگ) است که در بخش بعدی توضیح داده خواهد شد. اگر به اشتباه، یک متغیر عددی را در داخل کوتیشن ها تعریف کنید، با نتایج غیر منتظره ای مواجه خواهید شد.

اگر نمونه های بالا را امتحان کرده باشید، متوجه شده اید که بعضی از نتایج بالا، کمی عجیب به نظر می رسند. برای مثال، وقتی که عبارت استرینگ "12" را با عدد 12 جمع می کنیم (به هر ترتیبی)، جواب "1212" خواهد بود که باز هم یک استرینگ است. اما وقتی که استرینگ "12" را در عدد 2 ضرب می کنیم، جواب 24 می شود که یک عدد است. در اینجاست که جاوا اسکریپت واقعاً مغز خود را به کار می اندازد!

در نمونه ی اول، وقتی که ما عمل جمع را انجام می دهیم، جاوا اسکریپت حدس می زند که به خاطر آن که یکی از عبارات استرینگ است، پس منظور شما آن بوده که عبارت دیگر هم به صورت استرینگ با آن جمع شود. پس عبارت دوم (عدد) را به استرینگ تبدیل کرده و عملگر جمع را به عنوان یک عملگر چسباننده (Concatenation) می شناسد. این عملگر، دو عبارت استرینگ را پشت سر هم، به یکدیگر می چسباند و به همین دلیل، نتیجه ی نهایی "1212" خواهد بود.

در نمونه ی دوم، زمانی که ما عمل ضرب انجام می دهیم، یکی از اجزای معادله ی ما عدد است و از آنجایی که به هیچ وجه نمی توان استرینگ ها را با هم ضرب کرد، جاوا اسکریپت عبارت استرینگ را به عدد تبدیل کرده و سپس عمل ضرب را ادامه می دهد. اما اگر یک زمان بخواهیم دو عبارت استرینگ را در هم ضرب کنیم، چه اتفاقی می افتد؟

"Pirashki" * "Tractor"

نتیجه "NaN" خواهد بود؛ چون به هیچ وجه من الوجود نمی شود پیراشکی یا تراکتور را به عدد تبدیل کرد و جاوا اسکریپت هم به خوبی این را می داند!

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
رضا سنگ‌سفیدی
رضا سنگ‌سفیدیطراح رابط کاربری/توسعه‌دهنده php
خیلی خوبه. خداقوت.
ادامه داشته باشه