Baseline Widely available
BigInt
ÑÑо вÑÑÑоеннÑй обÑекÑ, коÑоÑÑй пÑедоÑÑавлÑÐµÑ ÑпоÑоб пÑедÑÑавлÑÑÑ ÑелÑе ÑиÑла болÑÑе 253 - 1, наиболÑÑего ÑиÑла, коÑоÑое JavaScript Ð¼Ð¾Ð¶ÐµÑ Ð½Ð°Ð´Ñжно пÑедÑÑавиÑÑ Ñ Number
пÑимиÑивом. ÐÑо макÑималÑное знаÑение можно полÑÑиÑÑ, обÑаÑивÑиÑÑ Ðº Number.MAX_SAFE_INTEGER
.
BigInt
ÑоздаÑÑÑÑ Ð¿ÑÑÑм Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ n
в ÐºÐ¾Ð½ÐµÑ ÑелоÑиÑленного лиÑеÑала â 10n
â или вÑзовом ÑÑнкÑии BigInt()
.
const theBiggestInt = 9007199254740991n;
const alsoHuge = BigInt(9007199254740991);
// ⪠9007199254740991n
const hugeString = BigInt("9007199254740991");
// ⪠9007199254740991n
const hugeHex = BigInt("0x1fffffffffffff");
// ⪠9007199254740991n
const hugeBin = BigInt(
"0b11111111111111111111111111111111111111111111111111111",
);
// ⪠9007199254740991n
РнекоÑоÑом ÑмÑÑле он поÑ
ож на Number
, но оÑлиÑаеÑÑÑ Ð² некоÑоÑÑÑ
клÑÑевÑÑ
моменÑаÑ
â его нелÑÐ·Ñ Ð¸ÑполÑзоваÑÑ Ñ Ð¼ÐµÑодами во вÑÑÑоенном обÑекÑе Math
и нелÑÐ·Ñ ÑмеÑиваÑÑ Ð² опеÑаÑиÑÑ
Ñ Ð»ÑбÑми ÑкземплÑÑами Number.
ÐÑедÑпÑеждение: Number
и BigInt
нелÑÐ·Ñ ÑмеÑиваÑÑ Ð² опеÑаÑиÑÑ
â они Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿ÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ðº ÑÐ¾Ð¼Ñ Ð¶Ðµ ÑипÑ.
ÐÑдÑÑе оÑÑоÑÐ¾Ð¶Ð½Ñ Ð¿ÑÐ¸Ð²Ð¾Ð´Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ ÑÑда и обÑаÑно, Ñак как ÑоÑноÑÑÑ BigInt Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾ÑеÑÑна пÑи пÑиведении к ÑиÑÐ»Ñ (Number)
.
ÐÑи пÑовеÑке Ñ Ð¸ÑполÑзованием опеÑаÑоÑа typeof
, BigInt
вÑдаÑÑ Ñип "bigint"
:
typeof 1n === "bigint"; // true
typeof BigInt("1") === "bigint"; // true
ÐÑи обоÑаÑивании в обÑекÑ, BigInt бÑÐ´ÐµÑ Ð¿ÑедÑÑавлен как обÑÑнÑй обÑекÑ:
typeof Object(1n) === "object"; // true
ÐпеÑаÑоÑÑ
СледÑÑÑие опеÑаÑоÑÑ Ð¼Ð¾Ð³ÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ñ BigInt
(или обÑекÑом-обÑÑÑкой BigInt
): +
, *
, -
, **
, %
.
ÐобиÑовÑе опеÑаÑии Ñакже поддеÑживаÑÑÑÑ, кÑоме >>>
(Ñдвиг впÑаво Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸ÐµÐ¼ нÑлÑми).
Ðе поддеÑживаемÑй ÑнаÑнÑй опеÑаÑÐ¾Ñ (+
) болÑÑе не Ð»Ð¾Ð¼Ð°ÐµÑ asm.js.
const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);
// ⪠9007199254740991n
const maxPlusOne = previousMaxSafe + 1n;
// ⪠9007199254740992n
const theFuture = previousMaxSafe + 2n;
// ⪠9007199254740993n, ÑÑо ÑабоÑаеÑ!
const multi = previousMaxSafe * 2n;
// ⪠18014398509481982n
const subtr = multi â 10n;
// ⪠18014398509481972n
const mod = multi % 10n;
// ⪠2n
const bigN = 2n ** 54n;
// ⪠18014398509481984n
bigN * -1n
// ⪠â18014398509481984n
ÐпеÑаÑÐ¾Ñ /
Ñакже ÑабоÑаеÑ, как и ожидалоÑÑ, Ñ ÑелÑми ÑиÑлами. Ðднако, поÑколÑÐºÑ ÑÑо BigInt, ÑÑа опеÑаÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð¾ÐºÑÑглÑÑÑÑÑ Ð² менÑÑÑÑ ÑÑоÑонÑ, Ñо еÑÑÑ Ð¾Ð½Ð° не бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑ ÐºÐ°ÐºÐ¸Ðµ-либо дÑобнÑе ÑиÑÑÑ.
ÐÑедÑпÑеждение: РезÑлÑÑÐ°Ñ Ð¾Ð¿ÐµÑаÑии Ñ Ð´ÑобнÑм ÑезÑлÑÑаÑом бÑÐ´ÐµÑ Ð¾ÐºÑÑглÑн в менÑÑÑÑ ÑÑоÑÐ¾Ð½Ñ Ð¿Ñи иÑполÑзовании BigInt
.
const expected = 4n / 2n;
// ⪠2n
const rounded = 5n / 2n;
// ⪠2n, not 2.5n
СÑавнениÑ
BigInt
Ñавен Number
ÑолÑко пÑи неÑÑÑогом ÑÑавнении.
0n === 0;
// ⪠false
0n == 0;
// ⪠true
ÐбÑÑнÑе ÑиÑла
и BigInt
можно ÑÑавниваÑÑ ÐºÐ°Ðº обÑÑно.
1n < 2;
// ⪠true
2n > 1;
// ⪠true
2 > 2;
// ⪠false
2n > 2;
// ⪠false
2n >= 2;
// ⪠true
Ðни могÑÑ Ð±ÑÑÑ ÑмеÑÐ°Ð½Ñ Ð² маÑÑÐ¸Ð²Ð°Ñ Ð¸ оÑÑоÑÑиÑованÑ:
const mixed = [4n, 6, -12n, 10, 4, 0, 0n];
// ⪠[4n, 6, -12n, 10, 4, 0, 0n]
mixed.sort();
// ⪠[-12n, 0, 0n, 10, 4n, 4, 6]
ÐбÑаÑиÑе внимание, ÑÑо ÑÑÐ°Ð²Ð½ÐµÐ½Ð¸Ñ Ñ Ð¾Ð±ÑекÑом
-обÑÑÑкой BigInt
дейÑÑвÑÑÑ ÐºÐ°Ðº Ñ Ð´ÑÑгими обÑекÑами, ÑказÑÐ²Ð°Ñ Ð½Ð° ÑавенÑÑво ÑолÑко когда ÑÑавниваеÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑнÑй ÑкземплÑÑ Ð¾Ð±ÑекÑа:
0n === Object(0n); // false
Object(0n) === Object(0n); // false
const o = Object(0n);
o === o; // true
УÑловнÑе вÑÑажениÑ
BigInt
ведÑÑ ÑÐµÐ±Ñ ÐºÐ°Ðº обÑÑное ÑиÑло
в ÑледÑÑÑиÑ
ÑлÑÑаÑÑ
:
Boolean
ÑеÑез ÑÑнкÑÐ¸Ñ Boolean
Logical Operators
||
, &&
и !
if statement
.if (0n) {
console.log("ÐÑÐ¸Ð²ÐµÑ Ð¸Ð· if!");
} else {
console.log("ÐÑÐ¸Ð²ÐµÑ Ð¸Ð· else!");
}
// ⪠"ÐÑÐ¸Ð²ÐµÑ Ð¸Ð· else!"
0n || 12n;
// ⪠12n
0n && 12n;
// ⪠0n
Boolean(0n);
// ⪠false
Boolean(12n);
// ⪠true
!12n;
// ⪠false
!0n;
// ⪠true
ÐонÑÑÑÑкÑоÑ
BigInt()
СоздаÑÑ Ð¾Ð±ÑÐµÐºÑ BigInt
.
BigInt.asIntN()
ÐбоÑаÑÐ¸Ð²Ð°ÐµÑ BigInt в пÑÐµÐ´ÐµÐ»Ð°Ñ Ð¾Ñ -2width-1 до 2width-1-1
BigInt.asUintN()
ÐбоÑаÑÐ¸Ð²Ð°ÐµÑ a BigInt в пÑÐµÐ´ÐµÐ»Ð°Ñ Ð¾Ñ 0 до 2width-1
BigInt.prototype.toLocaleString()
ÐозвÑаÑÐ°ÐµÑ ÑÑÑÐ¾ÐºÑ Ñ ÑзÑкозавиÑимÑм пÑедÑÑавлением ÑиÑла. ÐеÑеопÑеделÑÐµÑ Ð¼ÐµÑод Object.prototype.toLocaleString()
.
BigInt.prototype.toString()
ÐозвÑаÑÐ°ÐµÑ ÑÑÑокÑ, пÑедÑÑавлÑÑÑÑÑ ÑказаннÑй обÑÐµÐºÑ Ð¿Ð¾ ÑÐºÐ°Ð·Ð°Ð½Ð½Ð¾Ð¼Ñ Ð¾ÑÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ ÑиÑÑÐµÐ¼Ñ ÑÑиÑлениÑ. ÐеÑеопÑеделÑÐµÑ Ð¼ÐµÑод Object.prototype.toString()
.
BigInt.prototype.valueOf()
ÐозвÑаÑÐ°ÐµÑ Ð¿ÑимиÑивное знаÑение Ñказанного обÑекÑа. ÐеÑеопÑеделÑÐµÑ Ð¼ÐµÑод Object.prototype.valueOf()
.
ÐоÑколÑÐºÑ Ð¿Ñиведение Ð¼ÐµÐ¶Ð´Ñ Number
и BigInt
Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к поÑеÑе ÑоÑноÑÑи, ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ BigInt
ÑолÑко Ñогда, когда ÑазÑмно ожидаÑÑÑÑ Ð·Ð½Ð°ÑениÑ, пÑевÑÑаÑÑие 253 и не пÑиводиÑÑ Ð¼ÐµÐ¶Ð´Ñ Ð´Ð²ÑÐ¼Ñ Ñипами.
ÐпеÑаÑии поддеÑживаемÑе BigInt
не поÑÑоÑÐ½Ð½Ñ Ð²Ð¾ вÑемени. BigInt
ÑледоваÑелÑно не пÑигоден Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² кÑипÑогÑаÑии.
ÐÑполÑзование JSON.stringify()
Ñ Ð»ÑбÑм знаÑением Ñипа BigInt
пÑиведÑÑ Ðº TypeError
, поÑколÑÐºÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ BigInt
не пÑеобÑазÑеÑÑÑ Ð² JSON по ÑмолÑаниÑ, однако Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑеализоваÑÑ Ñвой ÑобÑÑвеннÑй меÑод toJSON
, еÑли вам необÑ
одимо:
BigInt.prototype.toJSON = function () {
return this.toString();
};
ТепеÑÑ Ð²Ð¼ÐµÑÑо оÑибки, JSON.stringify
бÑÐ´ÐµÑ ÑоздаваÑÑ ÑÑÑокÑ:
JSON.stringify(BigInt(1));
// '"1"'
ÐÑимеÑÑ Ð Ð°ÑÑÑÑ Ð¿ÑоÑÑÑÑ
ÑиÑел
// ÐозвÑаÑÐ°ÐµÑ true, еÑли BigInt â пÑоÑÑое ÑиÑло
function isPrime(p) {
for (let i = 2n; i * i <= p; i++) {
if (p % i === 0n) return false;
}
return true;
}
// ÐеÑÐµÑ BigInt в каÑеÑÑве аÑгÑменÑа и возвÑаÑÐ°ÐµÑ BigInt
function nthPrime(nth) {
let maybePrime = 2n;
let prime = 0n;
while (nth >= 0n) {
if (isPrime(maybePrime)) {
nth--;
prime = maybePrime;
}
maybePrime++;
}
return prime;
}
nthPrime(20n);
// ⪠73n
СпеÑиÑикаÑии СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами СмоÑÑиÑе Ñакже
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4