در JavaScript دو نوع متفاوت عدد وجود دارد: اعداد و bigintها.
اعداد پرکاربردتریناند و نوع دادهی عددی را در قالب ممیز شناور دقت مضاعف ۶۴ بیتی نمایش میدهند.
number: یک نوع دادهی عددی در قالب ممیز شناور دقت مضاعف ۶۴ بیتی (IEEE 754).
برای مثال -6، -2.4، 0، 0.1، 1، 3.14، 16.984025، 25، 976، 1024.0 و 500000.bigint: یک نوع دادهی عددی که میتواند اعداد صحیح را در قالب دقت دلخواه نمایش دهد.
برای مثال -12n، 0n، 4n و 9007199254740991n.let numericValue = 42;
// => 42
یک عدد ثابت مانند 42 در کد JavaScript یک مقدار ممیز شناور است، نه یک عدد صحیح.
نوع جداگانهای برای اعداد صحیح در استفادهی روزمرهی معمول وجود ندارد.
نوع bigint طوری طراحی نشده که در کاربردهای روزمره جایگزین نوع number شود.
42 همچنان یک Number است، نه BigInt.
اعداد را میتوان به شکلهای ثابتی مانند 0b101، 0o13 و 0x0A هم نوشت. دربارهی دستور واژگانی اعداد اینجا بیشتر بدانید.
نشانهگذاری E عددی را نشان میدهد که باید در ۱۰ به توان یک مقدار معین ضرب شود.
قالب نشانهگذاری E این است: یک عدد، سپس e یا E، و بعد توان ۱۰ که در آن ضرب میشود.
const num = 3.125e7;
// => 31250000
// The notation essentially says, "Take 3.125 and multiply it by 10^7".
از نشانهگذاری E میتوان برای نمایش اعداد خیلی کوچک هم استفاده کرد:
const num = 325987e-6; // Equals 0.325987
// The notation essentially says, "Take 325987 and multiply it by 10^-6.
میتوان از زیرخط استفاده کرد تا خواندن اعداد بزرگ برای کاربر راحتتر شود. کامپایلر زیرخطها را کاملاً نادیده میگیرد.
const num = 1_000_000; // You can read this as 1,000,000
console.log(num);
// => 1000000
دو شیء توکار وجود دارد که هنگام کار با اعداد مفیدند:
Number: ویژگیهای ایستا برای مقادیر رایج و مفید، متدهای ایستا برای بررسی نوع و تبدیل نوع، و متدهای نمونهای برای تبدیل نوع و قالببندی اعداد بهصورت رشته.Math: ویژگیها و متدهایی برای ثابتها و توابع ریاضی، که با BigInt کار نمیکند.Math متدهایی برای گرد کردن اعداد هم دارد.
میتوانید دربارهی گزینههای گرد کردن موجود در این مقالهی javascript.info دربارهی گرد کردن بیشتر بخوانید.
Math.floor(234.34); // => 234
Math.ceil(234.34); // => 235
object سراسری توکار Number همچنین یک function سراسری است که میتوان از آن برای تبدیل تقریباً هر آنچه شبیه عدد است به یک number استفاده کرد.
این کار از تجزیهی یک string به number سختگیرتر است.
const date = new Date('December 17, 1995 03:24:00');
const unix = Number(date);
unix;
// => 819199440000
سه نوع مقدار بیشینه (و کمینه / بیشینهی منفی) برای اعداد در JavaScript وجود دارد:
VALUE: که با Number.MAX_VALUE و Number.MIN_VALUE داده میشودINFINITY: که با Number.POSITIVE_INFINITY و Number.NEGATIVE_INFINITY داده میشودSAFE_INTEGER: که با Number.MAX_SAFE_INTEGER و Number.MIN_SAFE_INTEGER داده میشودبهدلیل نحوهی پیادهسازی اعداد در JavaScript، نه هر عددی بین Number.MIN_VALUE و Number.MAX_VALUE قابل نمایش است.
اما هر عددی بین Number.MIN_SAFE_INTEGER - 1 و Number.MAX_SAFE_INTEGER + 1 قابل نمایش است.
JavaScript چند مقدار عددی ویژه دارد:
NaN و Infinity.+0 و -0.مقدار خطای NaN (که «عدد نیست» نامیده میشود) در موارد زیر تولید میشود.
Number('123'); // => 123
Number('Hello, World!'); // => NaN
Math.sqrt(-64); // => NaN
NaN است:
NaN + 69; // => NaN
NaN تنها مقداری است که با خودش برابر نیست:
NaN === NaN; // => false
اگر میخواهید بررسی کنید که آیا مقداری NaN است، باید از تابع سراسری isNaN() استفاده کنید:
isNaN(NaN); // => true
isNaN(123); // => false
Infinity یک مقدار خطاست که یکی از دو مشکل را نشان میدهد:
Math.pow(2, 1024); // => Infinity
6 / 0; // => Infinity
-6 / 0; // => -Infinity
Infinity از هر عدد دیگری بزرگتر است (بهجز NaN).
بههمینترتیب، -Infinity از هر عدد دیگری کوچکتر است (بهجز NaN)
تابع سراسری isFinite() به شما امکان میدهد بررسی کنید که آیا مقداری یک عدد واقعی است یا نه (نه بینهایت و نه NaN):
isFinite(80085); // => true
isFinite(Infinity); // => false
isFinite(NaN); // => false
+0 و -0 در JavaScript دو عدد متمایزند. اینها زمانی تولید میشوند که عددی را نمایش داده باشید که آنقدر کوچک است که از ۰ قابل تشخیص نیست.
صفر علامتدار به شما امکان میدهد ثبت کنید که «از کدام جهت» به صفر نزدیک شدهاید؛ یعنی عدد پیش از آنکه صفر در نظر گرفته شود چه علامتی داشت.
بهترین کار این است که فرض کنید فقط یک صفر وجود دارد.
اعداد اگر مقدار یکسانی داشته باشند برابر در نظر گرفته میشوند.
1 == 1.0;
// => true
1 === 1.0;
// => true
// Remember, all numbers are floating-points, so this is
// different syntax for the exact same value.
1 === 1n;
// => false
// Strictly checking a number against a bigint will always result
// in false.
برای اطلاعات بیشتر دربارهی مقایسه بهطور کلی و مقایسهی مقادیر عددی در JavaScript، مقایسه را ببینید.
چون اعداد در JavaScript ممیز شناور هستند، تمام محاسبات ریاضی با این مقادیر هم ممیز شناور است. بنابراین، در JavaScript:
0.1 + 0.2 === 0.3;
// => false
برای توضیحی کوتاه، 0.30000000000000004.com را ببینید و برای توضیحی عمیق، پیوست D از راهنمای محاسبات عددی اوراکل، «آنچه هر دانشمند رایانه باید دربارهی حساب ممیز شناور بداند»، را ببینید.