جاوا اسکریپت فقط یک نوع شماره دارد. اعداد را می توان با یا بدون اعشار نوشت.
مثال
let x = 3.14; // A number with decimals let y = 3; // A number without decimals
اعداد خیلی زیاد یا خیلی کم را می توان با علامت گذاری علمی (نماد) نوشت:
مثال
let x = 123e5; // 12300000 let y = 123e-5; // 0.00123
شماره های جاوا اسکریپت همیشه نقطه شناور 64 بیتی هستند
بر خلاف بسیاری از زبانهای برنامه نویسی دیگر ، JavaScript انواع مختلفی از اعداد مانند عدد صحیح ، کوتاه ، بلند ، شناور و غیره را تعریف نمی کند.
اعداد جاوا اسکریپت ، طبق استاندارد بین المللی IEEE 754 ، همیشه به عنوان اعداد دقیق شناور با دقت دو برابر ذخیره می شوند.
این قالب اعداد را در 64 بیت ذخیره می کند ، جایی که عدد (کسر) در بیت های 0 تا 51 ، نمایانگر در بیت های 52 تا 62 و علامت در بیت 63 ذخیره می شود:
دقت، درستی
اعداد صحیح (اعداد بدون علامت دوره یا نماد) تا 15 رقم دقیق هستند.
مثال
let x = 999999999999999; // x will be 999999999999999 let y = 9999999999999999; // y will be 10000000000000000
حداکثر تعداد اعشاری 17 است ، اما حساب نقطه شناور همیشه 100٪ دقیق نیست:
مثال
let x = 0.2 + 0.1; // x will be 0.30000000000000004
برای حل مسئله فوق ، به ضرب و تقسیم کمک می کند:
مثال
let x = (0.2 * 10 + 0.1 * 10) / 10; // x will be 0.3
اضافه کردن اعداد و رشته ها
هشدار !!
جاوا اسکریپت از عملگر + برای جمع و الحاق استفاده می کند.
اعداد اضافه می شوند. رشته ها بهم پیوسته اند.
اگر دو عدد اضافه کنید ، نتیجه یک عدد خواهد بود:
مثال
let x = 10; let y = 20; let z = x + y; // z will be 30 (a number)
اگر دو رشته اضافه کنید ، نتیجه یک اتصال رشته خواهد بود:
مثال
let x = "10"; let y = "20"; let z = x + y; // z will be 1020 (a string)
اگر یک عدد و یک رشته اضافه کنید ، نتیجه یک اتصال رشته خواهد بود:
مثال
let x = 10; let y = "20"; let z = x + y; // z will be 1020 (a string)
اگر یک رشته و یک عدد اضافه کنید ، نتیجه یک اتصال رشته خواهد بود:
مثال
let x = "10"; let y = 20; let z = x + y; // z will be 1020 (a string)
یک اشتباه رایج این است که انتظار داریم این نتیجه 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” به هم متصل می شود زیرا z یک رشته است.
رشته های عددی
رشته های جاوا اسکریپت می توانند محتوای عددی داشته باشند:
let x = 100; // x is a number let y = "100"; // y is a string
JavaScript سعی خواهد کرد که رشته ها را به اعداد در تمام عملیات عددی تبدیل کند:
این کار می کند:
let x = "100"; let y = "10"; let z = x / y; // z will be 10
این نیز کار خواهد کرد:
let x = "100"; let y = "10"; let z = x * y; // z will be 1000
و این کار می کند:
let x = "100"; let y = "10"; let z = x - y; // z will be 90
اما این کار نمی کند:
let x = "100"; let y = "10"; let z = x + y; // z will not be 110 (It will be 10010)
در آخرین مثال JavaScript از عملگر + برای اتصال رشته ها استفاده می کند.
NaN – یک عدد نیست
NaN
یک کلمه رزرو شده در JavaScript است که نشان می دهد یک عدد یک شماره قانونی نیست.
تلاش برای انجام حساب با یک رشته غیر عددی منجر به NaN
(Not a Number) می شود:
مثال
let x = 100 / "Apple"; // x will be NaN (Not a Number)
با این حال ، اگر رشته حاوی مقدار عددی باشد ، نتیجه یک عدد خواهد بود:
مثال
let x = 100 / "10"; // x will be 10
می توانید از تابع JavaScript جهانی استفاده isNaN()
کنید تا بفهمید یک مقدار عدد است یا خیر
مثال
let x = 100 / "Apple"; isNaN(x); // returns true because x is Not a Number
سازمان دیده بان برای NaN
. اگر از NaN
یک عملیات ریاضی استفاده کنید ، نتیجه نیز حاصل خواهد شد NaN
:
مثال
let x = NaN; let y = 5; let z = x + y; // z will be NaN
یا ممکن است نتیجه یک اتصال باشد:
مثال
let x = NaN; let y = "5"; let z = x + y; // z will be NaN5
NaN
یک عدد است: typeof NaN
برمی گرداند number
:
مثال
typeof NaN; // returns "number"
بی نهایت
Infinity
(یا -Infinity
) مقداری است که جاوا اسکریپت در صورت محاسبه عددی خارج از بزرگترین عدد ممکن ، باز می گردد.
مثال
let myNumber = 2; while (myNumber != Infinity) { // Execute until Infinity myNumber = myNumber * myNumber; }
تقسیم بر 0 (صفر) نیز تولید می کند Infinity
:
مثال
let x = 2 / 0; // x will be Infinity let y = -2 / 0; // y will be -Infinity
Infinity
یک عدد است: typeof Infinity
برمی گرداند number
.
مثال
typeof Infinity; // returns "number"
هگزادسیمال
جاوا اسکریپت ثابت های عددی را اگر قبل از آنها 0x باشد تفسیر می کند به عنوان شانزده هزار
مثال
let x = 0xFF; // x will be 255
هرگز عددی را با صفر اول ننویسید (مانند 07).
بعضی از نسخه های جاوا اسکریپت اگر اعداد را با صفر جلو نوشته شوند ، به صورت هشتی تفسیر می کنند.
به طور پیش فرض ، JavaScript اعداد را به عنوان پایه 10 اعشاری نمایش می دهد .
اما می توانید از toString()
روش برای خروج اعداد از پایه 2 به مبنای 36 استفاده کنید .
هگزادسیمال پایه 16 است . دهدهی پایه 10 است . Octal پایه 8 است . باینری پایه 2 است .
مثال
let myNumber = 32; myNumber.toString(10); // returns 32 myNumber.toString(32); // returns 10 myNumber.toString(16); // returns 20 myNumber.toString(8); // returns 40 myNumber.toString(2); // returns 100000
اعداد می توانند شی باشند
به طور معمول اعداد جاوا اسکریپت مقادیر ابتدایی هستند که از حروف بزرگ ایجاد می شوند:
let x = 123;
اما اعداد را می توان به عنوان اشیا with با کلمه کلیدی نیز تعریف کرد new
:
let y = new Number(123);
مثال
let x = 123; let y = new Number(123); // typeof x returns number // typeof y returns object
تعداد اشیا را ایجاد نکنید. سرعت اجرا را کاهش می دهد. کلمه کلیدی پیچیده کد. این می تواند نتایج غیر منتظره ای ایجاد کند:
new
هنگام استفاده از ==
اپراتور ، تعداد برابر برابر هستند:
مثال
let x = 500; let y = new Number(500); // (x == y) is true because x and y have equal values
هنگام استفاده از ===
عملگر ، اعداد برابر برابر نیستند ، زیرا ===
اپراتور انتظار برابری را از نظر نوع و مقدار دارد.
مثال
let x = 500; let y = new Number(500); // (x === y) is false because x and y have different types
یا حتی بدتر. اشیا قابل مقایسه نیستند:
مثال
let x = new Number(500); let y = new Number(500); // (x == y) is false because objects cannot be compared
به تفاوت بین (x==y)
و توجه کنید (x===y)
.
مقایسه دو شی JavaScript همیشه برمی گردد false
.