در بخش اعداد جاوااسکریپت برخلاف سایر زبان های برنامه نویسی که دارای انواع نوع داده هستند تنها میتونیم یک نوع عدد داشته باشیم. همین نوع عدد میتواند بصورت اعشاری (decimal) یا بصورت عدد صحیح مثبت و منفی (integer) نوشته شود.
نمونه یک عدد اعشاری:
1 |
3.14 |
نمونه عدد صحیح:
1 |
4 |
عددی که خیلی بزرگ یا کوچک باشد را بصورت عدد نمایشی eNum یا e-Num بصورت اعشاری تعریف میکنیم.
مثال:
1 2 |
let x = 123e5; //12300000 |
1 2 |
let y = 123e-5; //0.00123 |
جاوااسکریپت برخلاف دیگر زبان های برنامه نویسی ، نمیتواند و این قدرت رو ندارد که اعداد رو در نوع های مختلفی ( مثه نوع Integers یا Short یا Long ) تعریف و نگهداری کند. اعداد در جاوااسکریپت براساس استاندارد IEEE754 و در قالب ۶۴ بیت نقطه اعشار ذخیره میشوند.
نحوه تقسیم بندی عدد در ۶۴ بیت
- عدد کسر از عدد ۰ تا ۵۱ بیت در قالب ۵۲ بیت
- توان عدد از بیت ۵۲ تا ۶۲ در قالب ۱۱ بیت
- علامت ها مانند $ و var در ۱ بیت
میزان دقت / درستی اعداد
دقت اعداد صحیح تا ۱۵ رقم بدون هیچ مشکلی محاسبه میشود.
مثال:
1 2 |
let x = 999999999999999; //999999999999999 |
1 2 |
let y = 9999999999999999; //10000000000000000 |
در اعداد اعشاری تا ۱۷ رقم محاسبه میشود ولی خب همیشه محاسبه نقطه اعشار بصورت ۱۰۰% دقیق نیست.
مثال:
1 2 |
let x = 0.2 + 0.1; //0.30000000000000004 |
برای ازبین بردن این ارقام اصلی باید آنها را در عدد ۱۰ ضرب کنیم سپس جمع کنیم.
مثال:
1 2 |
let x = (0.2 * 10 + 0.1 * 10) //0.3 |
تذکر
در جاوااسکریپت از عملگر + در اعداد جهت جمع کردن اما در رشته برای اتصال دو مقدار استفاده میشود. حتی اگر رشته حاوی عدد باشد.
نمونه عدد واقعی:
1 2 3 4 |
let x = 10; let y = 20; let z = x + y; //30 |
نمونه عدد رشته ای:
1 2 3 4 |
let x = "10"; let y = "20"; let z = x + y; //1020 |
حتی اگر یک طرف عملگر جمع عدد رشته ای باشد عملگر نقش اتصال را دارد.
مثال:
1 2 3 4 |
let x = 10; let y = "20"; let z = x + y; //1020 |
1 2 3 4 |
let x = "10"; let y = 20; let z = x + y; //1020 |
حتی در مثال زیر تبدیل به رشته میشود.
مثال:
1 2 3 4 |
let x = 10; let y = 20; let z = "The result is: " + x + y; //1020 |
در مثال زیر دو مقدار نخست ابتدا با هم جمع میشوند سپس بهم متصل میشوند.
مثال:
1 2 3 4 5 |
let x = 10; let y = 20; let z = "30"; let result = x + y + z; //3030 |
اعداد رشته ای
در جاوااسکریپت رشته ها نیز میتوانند حاوی عدد باشند.
مثال:
1 |
let y = "100"; |
در عملیات ریاضی بغیر از جمع کردن،جاوااسکریپت سعی میکند محاسبه را انجام دهد.
مثال:
1 2 3 4 |
let x = "100"; let y = "10"; let z = x / y; //10 |
1 2 3 4 |
let x = "100"; let y = "10"; let z = x * y; //1000 |
1 2 3 4 |
let x = "100"; let y = "10"; let z = x - y; //90 |
اما عملیات ریاضی جمع در مقادیر رشته ای اتفاق نمی افتد.
مثال:
1 2 3 4 |
let x = "100"; let y = "10"; let z = x + y; //10010 |
مقدار NaN
اگر در محاسبات ریاضی یک از طرف های عملگر رشته باشد یا مقداری باشد که عملیات ریاضی امکان پذیر نباشد مقدار NaN برگشت داده میشود. این واژه مخفف not a number است. یعنی عددی که عدد نیست.
مثال:
1 2 |
let x = 100 / "Apple"; //NaN |
در جاوااسکریپت تابع سراسری برای بررسی nan بودن مقدار به نام isNaN وجود دارد.در صورت nan بودن مقدار true برگشت داده میشود.
مثال:
1 2 3 |
let x = 100 / "Apple"; isNaN(x); //true |
جمع یک عدد با nan مقدار nan برگشت میدهد.
مثال:
1 2 3 4 |
let x = NaN; let y = 5; let z = x + y; //NaN |
1 2 3 4 |
let x = NaN; let y = "5"; let z = x + y; //NaN5 |
نوع داده NaN برابر با number است.
1 2 |
typeof NaN; //Number |
مقدار infinity
در صورتی که عدد ما بزرگتر از عدد معمول در جاوااسکریپت باشد مقدار infinity و infinity- برگشت میدهد.
مثال:
1 2 3 4 5 6 7 8 9 10 11 |
let myNumber = 2; while (myNumber != Infinity) { myNumber = myNumber * myNumber; } /* 2*2 4*2 8*2 16*2 ... */ |
تقسیم هر عددی بر ۰ برابر با infinity است. در صورتی که عدد منفی باشد مقدار infinity- برگشت میدهد.
مثال:
1 2 |
let x = 2 / 0; //Infinity |
1 2 |
let y = -2 / 0; //-infinity |
نوع داده infinity برابر با number است.
مثال:
1 2 |
typeof Infinity; //number |
اعداد بر مبنای ۱۶ یا هگزادسیمال
مقادیری که با ۰x شروع شود عدد بر مبنای hex هستند.
مثال:
1 2 |
let x = 0xFF; //255 |
اعداد بر مبنای ۸ یا اکتال
مقادیری که با ۰ نوشته شوند بر مبنای اکتال هستند. بنابراین هیچ گاه عدد خود را بصورت ۰۷ ننویسید چون مبنای آن اکتال و خروجی آن متفاوت است.
اعداد در مبنای ۱۰ یا دسیمال یا اعشاری
بصورت پیش فرض اعداد در جاوااسکریپت بر مبنای ۱۰ یا دسمیال هستند.
مثال:
1 2 |
let x = 100; //100 |
اعداد برمبنای باینری یا دودویی
این نوع عدد در محاسبات رایانه ای اتفاق میفتد. این نوع محاسبه را در دروس قبلی توضیح داده ایم. برای مشاهده نحوه محاسبه به بخش های قبلی عملگرها مراجعه کنید
مثال:
1 2 |
let x = 1010; //10 |
میتوان با متد toString که از طریق تابع number در دسترس است مبنای نمایش عدد به دسیمال، هگزادسیمال، اکتال یا باینری تغییر داد.
مثال:
1 2 3 |
let myNumber = 32; myNumber.toString(10); //32 |
1 2 |
myNumber.toString(32); //10 |
1 2 |
myNumber.toString(16); //20 |
1 2 |
myNumber.toString(8); //40 |
1 2 |
myNumber.toString(2); //100000 |
اعداد میتوانند از نوع آبجکت باشند
اعداد در حالت عادی بصورت لیترال تعریف میشود.
مثال:
1 |
let x = 123; |
اما اگر تابع Number را با کلمه کلیدی new فراخوانی کنیم تبدیل به آبجکت میشود.
مثال:
1 2 3 |
let y = new Number(123); typeof y; //Object |
نوع اعداد را هیچ وقت به آبجکت تغییر ندهید چون هیچ فرقی در دسترسی و استفاده از آن ندارد فقط سرعت اجرای اسکریپت شما را کاهش میدهد.
زمانی که با عملگر مقایسه ای == دو مقدار زیر با هم مقایسه میشوند نتیجه یکسان است.
مثال:
1 2 3 4 |
let x = 500; let y = new Number(500); x == y //true |
اما همین مقایسه اگر از نوع داده باشد مقدار false برگشت داده میشود.
مثال:
1 2 3 4 |
let x = 500; let y = new Number(500); x === y //false |
حتی مقایسه دو مقدار عددی از نوع آبجکت با هم برابر نیستند.
مثال:
1 2 3 4 |
let x = new Number(500); let y = new Number(500); x === y //false |
متدهای اعداد در جاوااسکریپت
برای کار کردن راحتتر با اعداد متدهایی در نظر گرفته شده است. در اینجا برخی از این متدها را نمایش میدهیم.
مقادیر اولیه مانند ۳٫۱۴ یا ۲۰۲۲ بدلیل ماهیت و لیترال بودنشان و به شکل آبجکت نبودنشان امکان تعریف و استفاده از متدها وجود ندارد.
اما جاوااسکریپت در هنگام استفاده از متدها و خصوصیات در اعداد اولیه با آنها همانند آبجکت برخورد میکند و میتوان از متدها و خصوصیات استفاده کرد.
تمامی متدهای مربوط به اعداد بر روی انواع اقسام اعداد قابل پیاده سازی هستند.
انواع حالت های نمایش اعداد عبارتند از:
- مقدار لیترال
- متغیرها
- عبارت های ریاضی
تبدیل متغیرها به number
جاوااسکریپت دارای ۳ متد برای تبدیل متغیرها یا مقادیر با هر نوع داده ای به عدد یا number است. این متدها بعنوان متد زیرمجموعه تابع Number نیستند بلکه بعنوان متدهای عمومی شناخته میشوند. این متدها میتوانند توسط انواع دادهها مورد استفاده قرار بگیرند.
این سه متد عمومی برای تبدیل مقدار به عدد هستند:
- متد Number()
- متد parseInt()
- متد parseFloat()
لیست خصوصیت های اعداد در جاوااسکریپت
نام تابع | توضیح | نحوه نوشتن |
خصوصیت NaN |
این خصوصیت یک مقدار عددی که در واقع عدد نیست برگشت می دهد. |
Number.NaN; |
خصوصیت NEGATIVE_INFINITY |
این خصوصیت یک عدد بی نهایت منفی را برگشت می دهد. این مقدار پایین تر از هر مقدار عدد است. در واقع کوچکتر از MIN_VALUE. |
Number.NEGATIVE_INFINITY; |
خصوصیت POSITIVE_INFINITY |
این خصوصیت یک عدد بی نهایت مثبت را برگشت می دهد. این مقدار بالاتر از هر مقدار عدد است. در واقع بزرگتر از MAX_VALUE. |
Number.POSITIVE_INFINITY; |
خصوصیت MIN_VALUE | این خصوصیت کوچکترین عدد مثبت قابل نمایش در جاوااسکریپت را برگشت میدهد. این مقدار حدود ۵e-324 است. مقدار کوچکتر از این مقدار برابر با ۰ است. این خصوصیت تنها از طریق تابع Number قابل دسترس است و نمیتوان از طریق متغیر به آن دسترسی پیدا کرد. در این حالت مقدار undefined برگشت میدهد. |
Number.MIN_VALUE; |
خصوصیت MAX_VALUE |
این خصوصیت بزرگترین عدد قابل نمایش در جاوااسکریپت را برگشت میدهد. این مقدار حدود ۱٫۷۹۷۶۹۳۱۳۴۸۶۲۳۱۵۷e+308 است. مقدار بزرگتر از این مقدار برابر با infinity است. |
Number.MAX_VALUE; |
لیست توابع اعداد در جاوااسکریپت
نام تابع | توضیح | نحوه نوشتن |
تابع toString |
این تابع عدد شما را به رشته تبدیل میکند. مقادیر عددی شما میتواند از هر نوعی باشد. |
number.toString(radix); |
تابع toExponential |
این تابع عدد شما را به مقدار نمایی علمی تبدیل میکند. نوع عدد خروجی یک مقدار اعشاری است. |
number.toExponential(x); |
تابع toFixed |
این تابع عدد شما را به رشته تبدیل میکند. این تابع در اعداد اعشاری بسته به پارامتری که دریافت می کند بعد از علامت اعشاری شمارش کرده و مابقی اعداد مانده در آخرین عدد رند می شود.در صورتی که عدد وارد شده در پارامتر بزرگتر از طول عدد باشد در انتها رقم ۰ را قرار می دهد. |
number.toFixed(x); |
تابع toPrecision | این تابع عدد شما را به رشته تبدیل میکند. این تابع همانطور که از نامش مشخص است دارای دقت بالایی است.
این تابع براساس پارامتری که در قالب عدد دریافت میکند عدد نهایی را با طول مشخص برگشت میدهد. |
number.toPrecision(x); |
تابع valueOf |
این تابع مقدار اولیه عدد را برگشت می دهد. |
number.valueOf(); |
تابع isNaN |
این تابع بررسی میکند مقدار شما عدد نیست در صورت عدد نبودن مقدار true برگشت میدهد. مقدار بازگشتی یک مقدار بولین است. |
Number.isNaN(value); |
تابع toLocaleString | این تابع عدد شما را به رشته تبدیل می کند.
هدف از استفاده از این تابع تبدیل عدد شما به یک فرمت مشخص براساس تنظیمات محلی در رایانه است. از این متد میتوان در ۳ رقم جدا کردن عدد استفاده شود |
number.toLocaleString(locales, options); |