129 lines
2.0 KiB
JavaScript
129 lines
2.0 KiB
JavaScript
// https://github.com/tc39/proposal-bigint
|
||
|
||
const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);
|
||
// ↪ 9007199254740991
|
||
|
||
const maxPlusOne = previousMaxSafe + 1n;
|
||
// ↪ 9007199254740992n
|
||
|
||
const theFuture = previousMaxSafe + 2n;
|
||
// ↪ 9007199254740993n, this works now!
|
||
|
||
const multi = previousMaxSafe * 2n;
|
||
// ↪ 18014398509481982n
|
||
|
||
// `–` is not minus sign,
|
||
// SIC https://github.com/tc39/proposal-bigint#operators
|
||
// const subtr = multi – 10n;
|
||
// ↪ 18014398509481972n
|
||
|
||
const mod = multi % 10n;
|
||
// ↪ 2n
|
||
|
||
const bigN = 2n ** 54n;
|
||
// ↪ 18014398509481984n
|
||
|
||
bigN * -1n
|
||
// ↪ –18014398509481984n
|
||
|
||
0n === 0
|
||
// ↪ false
|
||
|
||
0n == 0
|
||
// ↪ true
|
||
|
||
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]
|
||
|
||
if (0n) {
|
||
console.log('Hello from the if!');
|
||
} else {
|
||
console.log('Hello from the else!');
|
||
}
|
||
|
||
// ↪ "Hello from the else!"
|
||
|
||
0n || 12n
|
||
// ↪ 12n
|
||
|
||
0n && 12n
|
||
// ↪ 0n
|
||
|
||
Boolean(0n)
|
||
// ↪ false
|
||
|
||
Boolean(12n)
|
||
// ↪ true
|
||
|
||
!12n
|
||
// ↪ false
|
||
|
||
!0n
|
||
// ↪ true
|
||
|
||
const view = new BigInt64Array(4);
|
||
// ↪ [0n, 0n, 0n, 0n]
|
||
view.length;
|
||
// ↪ 4
|
||
view[0];
|
||
// ↪ 0n
|
||
view[0] = 42n;
|
||
view[0];
|
||
// ↪ 42n
|
||
|
||
// Highest possible BigInt value that can be represented as a
|
||
// signed 64-bit integer.
|
||
const max = 2n ** (64n - 1n) - 1n;
|
||
view[0] = max;
|
||
view[0];
|
||
// ↪ 9_223_372_036_854_775_807n
|
||
view[0] = max + 1n;
|
||
view[0];
|
||
// ↪ -9_223_372_036_854_775_808n
|
||
// ^ negative because of overflow
|
||
|
||
1n + 2
|
||
// ↪ TypeError: Cannot mix BigInt and other types, use explicit conversions
|
||
|
||
1n * 2
|
||
// ↪ TypeError: Cannot mix BigInt and other types, use explicit conversions
|
||
|
||
+1n
|
||
// ↪ TypeError: Cannot convert a BigInt value to a number
|
||
|
||
Number(1n)
|
||
// ↪ 1
|
||
|
||
1n + '2'
|
||
// ↪ "12"
|
||
|
||
'2' + 1n
|
||
// ↪ "21"
|
||
|
||
const badPrecision = BigInt(9007199254740993);
|
||
// ↪9007199254740992n
|
||
|
||
const goodPrecision = BigInt('9007199254740993');
|
||
// ↪9007199254740993n
|
||
|
||
const alsoGoodPrecision = 9007199254740993n;
|
||
// ↪9007199254740993n
|