در جاوااسکریپت، اعداد بر اساس فرمت باینری ۶۴ بیتی با دقت مضاعف استاندارد IEEE 754 پیادهسازی میشوند؛ یعنی عددی بین $\pm2^{-1022}$ و $\pm2^{+1023}$ (یا حدود $\pm10^{-308}$ تا $\pm10^{+308}$) با دقت عددی ۵۳ بیت. مقادیر صحیح تا سقف $\pm(2^{53} - 1)$ را میتوان به طور دقیق در این فرمت نشان داد.
نوع دادهی عدد (Number) علاوه بر توانایی نمایش اعداد ممیز شناور (Floating-point)، سه مقدار نمادین و خاص نیز دارد:
Infinity (بینهایت مثبت)
Infinity- (بینهایت منفی)
NaN (مخفف Not-a-Number یا غیرعدد)
شما میتوانید از چهار نوع فرمت مختلف برای نوشتن مقادیر ثابت عددی (Number literals) استفاده کنید: دهدهی (Decimal)، باینری (Binary)، هشتدهی (Octal) و شانزدهدهی (Hexadecimal).
1234567890
42
ثابتهای عددی دهدهی میتوانند با یک صفر (0) شروع شوند که به دنبال آن یک رقم دهدهی دیگر قرار دارد؛ اما اگر تمام رقمهای بعد از صفرِ ابتدایی کوچکتر از ۸ باشند، آن عدد به عنوان یک عدد هشتدهی (Octal) تفسیر میشود. این یک ساختار قدیمی (Legacy) محسوب میشود و نوشتن اعداد با پیشوند 0 (چه هشتدهی تفسیر شوند و چه دهدهی) در حالت Strict Mode باعث بروز خطای سینتکس (SyntaxError) میشود؛ بنابراین، به جای آن باید از پیشوند 0o استفاده کنید.
0888 // عدد 888 به عنوان دهدهی تحلیل میشود
0777 // به عنوان هشتدهی تفسیر شده و معادل 511 در سیستم دهدهی است
ساختار اعداد باینری (مبنای ۲) با یک صفر شروع میشود که به دنبال آن حرف لاتین "B" به صورت کوچک یا بزرگ قرار میگیرد (0b یا 0B). اگر رقمهای بعد از 0b چیزی به جز ۰ یا ۱ باشند، خطای SyntaxError: Missing binary digits after 0b رخ میدهد.
0b10000000000000000000000000000000 // 2147483648
0b01111111100000000000000000000000 // 2139095040
0B00000000011111111111111111111111 // 8388607
ساختار استاندارد برای نوشتن اعداد هشتدهی (مبنای ۸) این است که آنها را با پیشوند 0o یا 0O شروع کنید. برای مثال:
0O755 // 493
0o644 // 420
یک ساختار قدیمی نیز برای اعداد هشتدهی وجود دارد که در آن فقط یک صفر قبل از عدد قرار میگیرد؛ مثل 0644 === 420 و "% " === "045\". در این ساختار قدیمی اگر رقمهای بعد از صفر خارج از محدوده ۰ تا ۷ باشند، عدد به عنوان یک عدد دهدهی معمولی تفسیر میشود:
const n = 0755; // 493
const m = 0644; // 420
حالت Strict Mode استفاده از این ساختار قدیمی هشتدهی را ممنوع کرده است.
ساختار اعداد شانزدهدهی (مبنای ۱۶) با یک صفر شروع میشود که به دنبال آن حرف لاتین "X" به صورت کوچک یا بزرگ قرار میگیرد (0x یا 0X). اگر رقمهای بعد از 0x خارج از محدوده مجاز (0123456789ABCDEF) باشند، خطای SyntaxError: Identifier starts immediately after numeric literal رخ میدهد.
0xFFFFFFFFFFFFF // 4503599627370495
0xabcdef123456 // 1889009675930460
0XA // 10
0e-5 // 0
0e+5 // 0
5e1 // 50
1.75e-2 // 0.0175
1e3 // 1000
1e-3 // 0.001
1E3 // 1000
در تمام ساختارهای نوشتن اعدادی که در بالا دیدیم، میتوان از خط تیره زیرین (_) بین ارقام استفاده کرد تا خوانایی عدد بیشتر شود:
1_000_000_000_000
1_050.95
0b1010_0001_1000_0101
0o2_2_5_6
0xA0_B0_C0
1_000_000_000_000_000_000_000n
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://developer.mozilla.org/en-US/docs/Web/JavaScript