جاوااسكريپت فقط داراي يك نوع عدد ميباشد، اعداد راميتوان بدون نقطه اعشاري يا بانقطه اعشاري نوشت.
مثال ـ نمونه اعداد
let x = 3.14; // A number with decimals let y = 3; // A number without decimals
اعداد بسيار بزرگ يا بسيار كوچك را ميتوان با نماد علمي(e) نمايش داده يا نوشت.
مثال ـ اعداد با نماد علمي
let x = 123e5; // 12300000 let y = 123e-5; // 0.00123
اعداد جاوااسكريپت هميشه64 بيتي شناور هستند(64-bit Floating Point)
برعكس بيشتر زبانهاي برنامه نويسي كه مشابه نوعinteger, short, long,floating piont وغيره دارند.
اعدادجاوااسكريپت هميشه بعنوان مميزشناور بادقت مضاعف مطابق استانداردIEE 754 بين المللي ذخيره مي شوند.
اين فرم اعداد در64بيت ذخيره ميگردند، كه در آن مانتيس در بيت هاي 0 تا51 ،توان بيت هاي52 تا 62وعلامت بيت63
عدد صحيح(Integer Number) بدون نقطه اعشاري وبدون توان تا پانزده رقم دقت دارند.
مثال ـ نمايش دقت اعداد صحيح
let x = 999999999999999; // x will be 999999999999999 let y = 9999999999999999; // y will be 10000000000000000
حداكثر تعدادارقام اعشاري17 رقم ا.ست.
محاسبات اعداد اعشاري هميشه داراي100% دقت نيست .
مثال ـ اعداد اعشاري
let x = 0.2 + 0.1;
اگر نتيجه اجرا را مشاهده كنيد ، نتيجه دقيق نيست ونتيجه بصورت زيراست.
براي رفع مشكل بايد اعداد در10ضرب وحاصل تفسيم بر 10 شود .مطابق زير
let x = (0.2 * 10 + 0.1 * 10) / 10;
اخطار ـ در جاوااسكريپت عملگر+ براي دو عمل جمع اعداد وچسباندن رشته ها استفاده ميشود.
اگر دوعدد را جمع كنيد، حاصل جمع اعداد، نوع عددي ميشود.
مثال ـ جمع اعداد
let x = 10; let y = 20; let z = x + y;
اگر دو رشته را با هم جمع كنيد حاصل رشته اي با چسباندن آنها بدست مي آيد.
مثال ـ جمع رشته ها
let x = "10"; let y = "20"; let z = x + y;
اگر عددي با رشته اي جمع شود، عدد بفرم رشته با رشته باهمconcatenate ميشوند .
مثال ـ جمع عدد بارشته
let x = 10; let y = "20"; let z = x + y;
اگر رشته با عدد جمع شود، حاصل رشته اي با چسباندن رشته به عدد بدست مي آيد.
مثال ـ جمع رشته باعدد.
let x = "10"; let y = 20; let z = x + y;
يك برداشت اشتباه عمومي اينست كه نتيجه30 مي شود.
مثال ـ جمع رشته با دوعدد.
let x = 10; let y = 20; let z = "The result is: " + x + y;
مثال ـ برداشت نادرست كه نتيجه102030 ميشود .
let x = 10; let y = 20; let z = "30"; let result = x + y + z;
جاوااسكريپت عمليات را از چپ براست تفسير واجرا ميكند.
مرحله اول ـ10+20 جمع انجام ميشود، چون متغيرهاي x و y هردو عددي هستند .حاصل 30ميشود .
مرحله دوم ـ30+"30" انجام ميشود، چون z رشته است آنها بهم چسبانده ميشوند .نتيجه 3030ميباشد .
رشته ها در جاوااسكريپت مي توانند داراي محتوي عددي باشند.
let x = 100; // x is a number let y = "100"; // numeric string
جاوااسكريپت سعي ميكند رشته هارا در تمام عمليات عددي بجز جمع تبديل به عدد نمايد.
مثال ـ نمونه زير كار ميكند.
let x = "100"; let y = "10"; let z = x / y;
مثال ـ اين هم كارميكند.
let x = "100"; let y = "10"; let z = x * y;
مثال ـ اين عمل تفريق هم كارميكند.
let x = "100"; let y = "10"; let z = x - y;
مثال ـ اين عمل جمع كار ميكند اما بعنوان جمع دوعدد خير
let x = "100"; let y = "10"; let z = x + y;
در مثال فوق جاوااسكريپت ازعملگر+ براي پيوستن رشته ها استفاده مي نمايد .
NaNيك كلمه رزرو شده در جاوااسكريپت است ونشانه يك عدد غير قانوني است .
تلاش براي انجام محاسيات با يك رشته غير عددي منجر به نتيجهNaN ميشود .
مثال ـ نتيجه عبارت محاسباتيNaNاست .
let x = 100 / "Apple";
چنانچه رشته"Apple"عددي ميبود، نتيجه عددي ميباشد .
مثال ـ تقسيم فوق با رشته عددي
let x = 100 / "10";
ميتوان ازتابعisNaN( ) براي بررسي اعداد غيرقانوني استفاده كرد .
مثال ـ استفاده ازتابعisNan( )
let x = 100 / "Apple"; isNaN(x);
مراقب استفاده ازNaN باشيد، اگر درعبارت محاسباتي از آن استفاده كنيد، نتيجه NaN ميباشد .
مثال ـ استفادهNaN در عبارت محاسباتي
let x = NaN; let y = 5; let z = x + y;
مثال ـ جمعNaN با رشته
let x = NaN; let y = "5"; let z = x + y;
NaNنوع عددي است ، اگر باtypeof نوع آن بررسي شود ، نتيجه numberميباشد .
مثال ـ بررسيNaN با typeof
typeof NaN;
infinityيا -infinity مقادير جاوااسكريپت هستند، كه در صورتيكه نتيجه محاسبات خارج از ظريفيت نگهداري اعداد باشد، برگشت ميشود .بعبارتي آن بينهايت جاوااسكريپت است.
نتيجه نهائي محاسبه حلقه به مثال -infinity ختم ميشود .
let myNumber = 2; // Execute until Infinity while (myNumber != Infinity) { myNumber = myNumber * myNumber; }
مثال ـ تقسيم برعدد صفرهم داراي نتيجهinfinity
let x = 2 / 0; let y = -2 / 0;
infinityدر جاوااسكرپت بعنوان عدد شناخته ميشود، اگر باtypeof آنرا ارزيابي كنيم نتيجه نوع عددي است.
مثال ـ ارزيابيinfinity
typeof Infinity;
جاوااسكريپت اعداد ثابت بفرم هگزا را در صورتيكه عدد بدنبال0x قرار گيرند، تفسير مي نمايد.
مثال ـ نمونه عدد هگزا
let x = 0xFF;
هرگز عددي را با0 مثل07 شروع نكنيد، ممكن است بعضي از نسخه هاي جاوااسكريپت آنرا عدد مبناي هشت تفسيركنند5.
بصورت پيش فرض جاوااسكريپت عدد را در مبناي ده نمايش ميدهد.
اما ميتوان با متدtoString( ) براي خروجي درمبناهاي2 تا 36 تبديل نمود.
مبناهاي معروف مطابق زيرند:
مثال ـ تبدبل عدد به مبناي هاي مختلف
let myNumber = 32; myNumber.toString(32); myNumber.toString(16); myNumber.toString(12); myNumber.toString(10); myNumber.toString(8); myNumber.toString(2);
معمولا در جاواسكريپت اعداد از طربق اعدا معمولي يا ليترال، ايجاد ميشوند .نمونه زير:
let x = 123;
اما اعداد ميتوانند با كي وردnew بعنوان يك شئ تعريف شوند .نمونه زير :
let y = new Number(123);
مثال ـ تعريف عدد وشئ عددي
let x = 123;
let y = new Number(123);
شئ عددي ايجاد نكنيد .چون كي وردnew داراي كد پيچيده ايست، و سرعت اجرا را كاهش ميدهد.
همچنين شئ هاي عددي ميتوانند در عمليات نتايج دور از انتظار بوجود آورند.
هنگاميكه از عملگر(==) برايx وy ،استفاده شود نتيجه در مثال زير تساوي است.
let x = 500;
let y = new Number(500);
هنگاميكه عملگر(===) براي دومتغير اعمال مي شود، نتيجه نامساويست
let x = 500;
let y = new Number(500)
به تفاوت مابين دوعملگر(==) و(===) توجه كنيد.
مثال ـ نتيجه(x==y) درست است يا نادرست
let x = new Number(500); let y = new Number(500);
مثال ـ نتيجه(x===y) درست است يا نادرست
let x = new Number(500); let y = new Number(500);