بیشترین مقدار عدد صحیح در جاوا اسکریپت که میتوان به آن رسید بدون اینکه دقت از دست برود چیست؟
جاوا اسکریپت دو نوع عددی دارد: Number
و BigInt
. نوع عددی Number
، یک عدد شناور ۶۴ بیتی است که بر مبنای استاندارد IEEE 754 ذخیره میشود. در این سیستم، بالاترین مقدار صحیح دقیقی که میتوان از آن استفاده کرد، Number.MAX_SAFE_INTEGER
است که برابر با ۹۰۷۱۹۹۲۵۴۷۴۰۹۹۲ میباشد. این عدد به دلیل ویژگیهای خاص ذخیرهسازی اعداد شناور نمیتواند دقیقتر از آن استفاده شود.
اگر می خواهید از اعداد بزرگتر از این مقدار در برنامه خود استفاده کنید باید از BigInt استفاده کنید که محدودیتی در کران خود ندارد. برای مثال، اگر مقدار x
را برابر ۹۰۷۱۹۹۲۵۴۷۴۰۹۹۲ قرار دهیم، با عملیات ساده ریاضی زیر برنامه شما به مشکل خواهد خورد.
var x = 9007199254740992;
console.log(x === x + 1); // true
نکته دیگر استفاده از عملگرهای بیتی است که میتواند منجر به نتایج غیر منتظره شود، چون این عملیاتها براساس اعداد ۳۲ بیتی کار میکنند. بنابراین، مقدار ایمن بیشینه برای این نوع عملیاتها برابر با ۲,۱۴۷,۴۸۳,۶۴۷
است.
از نظر سازگاری با مرورگرها، این مقادیر و رفتارهایی که مورد اشاره قرار گرفت، در مرورگرهای مختلف ثابت و یکسان هستند، زیرا این ویژگیها بخشی از مشخصات زبان جاوا اسکریپت است و در تمامی محیطها باید یکسان عمل کنند. بهعلاوه، برای اطلاع از مقادیر حداقل و حداکثر، میتوان از Number.MIN_SAFE_INTEGER
و Number.MAX_SAFE_INTEGER
در نسخههای ES6 و بعدتر استفاده کرد.
نکته دیگر اینکه اگر از اعداد بزرگ برای شناسه اشیای دریافتی از سرور استفاده می کنید. بهتر است این مقادیر را به صورت رشته بازگردانید. زیرا بر روی این مقادیر عملیات های ریاضی انجام نمی شود ولی ممکن است به دلیل اورفلو، باعث تغییر شناسه اشیا و رفتارهای ناخواسته در برنامه شما شود.