Baseline Widely available
BigInt
æ¯ä¸ç§å
置对象ï¼å®æä¾äºä¸ç§æ¹æ³æ¥è¡¨ç¤ºå¤§äº 2^53 - 1
çæ´æ°ãè¿åæ¬æ¯ Javascript ä¸å¯ä»¥ç¨ Number
表示çæå¤§æ°åãBigInt
å¯ä»¥è¡¨ç¤ºä»»æå¤§çæ´æ°ã
å¯ä»¥ç¨å¨ä¸ä¸ªæ´æ°åé¢éåé¢å n
çæ¹å¼å®ä¹ä¸ä¸ª BigInt
ï¼å¦ï¼10n
ï¼æè
è°ç¨å½æ° BigInt()
ï¼ä½ä¸å
å« new
è¿ç®ç¬¦ï¼å¹¶ä¼ éä¸ä¸ªæ´æ°å¼æå符串å¼ã
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
å®ä¾æ··åè¿ç®ï¼ä¸¤è
å¿
é¡»è½¬æ¢æåä¸ç§ç±»åãå¨ä¸¤ç§ç±»åæ¥åè½¬æ¢æ¶è¦å°å¿ï¼å 为 BigInt
åéå¨è½¬æ¢æ Number
åéæ¶å¯è½ä¼ä¸¢å¤±ç²¾åº¦ã
ä½¿ç¨ typeof
æµè¯æ¶ï¼ BigInt
对象è¿å "bigint" ï¼
typeof 1n === "bigint"; // true
typeof BigInt("1") === "bigint"; // true
ä½¿ç¨ Object
å
è£
åï¼ BigInt
被认为æ¯ä¸ä¸ªæ®é "object" ï¼
typeof Object(1n) === "object"; // true
è¿ç®
以䏿ä½ç¬¦å¯ä»¥å BigInt
ä¸èµ·ä½¿ç¨ï¼ +
ã*
ã-
ã**
ã%
ãé¤ >>>
ï¼æ 符å·å³ç§»ï¼ä¹å¤ç ä½æä½ ä¹å¯ä»¥æ¯æãå 为 BigInt
齿¯æç¬¦å·çï¼ >>>
ï¼æ 符å·å³ç§»ï¼ä¸è½ç¨äº BigInt
ã为äºå
¼å®¹ asm.jsï¼BigInt
䏿¯æåç® (+
) è¿ç®ç¬¦ã
const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);
// ⪠9007199254740991n
const maxPlusOne = previousMaxSafe + 1n;
// ⪠9007199254740992n
const theFuture = previousMaxSafe + 2n;
// ⪠9007199254740993n, this works now!
const multi = previousMaxSafe * 2n;
// ⪠18014398509481982n
const subtr = multi â 10n;
// ⪠18014398509481972n
const mod = multi % 10n;
// ⪠2n
const bigN = 2n ** 54n;
// ⪠18014398509481984n
bigN * -1n
// ⪠â18014398509481984n
/
æä½ç¬¦å¯¹äºæ´æ°çè¿ç®ä¹æ²¡é®é¢ã坿¯å 为è¿äºå鿝 BigInt
è䏿¯ BigDecimal
ï¼è¯¥æä½ç¬¦ç»æä¼åé¶åæ´ï¼ä¹å°±æ¯è¯´ä¸ä¼è¿åå°æ°é¨åã
è¦åï¼ å½ä½¿ç¨ BigInt
æ¶ï¼å¸¦å°æ°çè¿ç®ä¼è¢«åæ´ã
const expected = 4n / 2n;
// ⪠2n
const rounded = 5n / 2n;
// ⪠2n, not 2.5n
æ¯è¾
BigInt
å Number
䏿¯ä¸¥æ ¼ç¸ççï¼ä½æ¯å®½æ¾ç¸ççã
0n === 0;
// ⪠false
0n == 0;
// ⪠true
Number
å 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]
注æè¢« Object
å
è£
ç BigInt
ä½¿ç¨ object çæ¯è¾è§åè¿è¡æ¯è¾ï¼åªç¨åä¸ä¸ªå¯¹è±¡å¨æ¯è¾æ¶æä¼ç¸çã
0n === Object(0n); // false
Object(0n) === Object(0n); // false
const o = Object(0n);
o === o; // true
æ¡ä»¶
BigInt
å¨éè¦è½¬æ¢æ Boolean
çæ¶è¡¨ç°è· Number
类似ï¼å¦éè¿ Boolean
彿°è½¬æ¢ï¼ç¨äº Logical Operators
||
, &&
, å !
çæä½æ°ï¼æè
ç¨äºå¨å if statement
è¿æ ·çæ¡ä»¶è¯å¥ä¸ã
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
æé å¨
BigInt()
å建BigInt
对象ã
BigInt.asIntN()
å° BigInt å¼è½¬æ¢ä¸ºä¸ä¸ª -2^(width-1) ä¸ 2^(width-1) - 1 ä¹é´çæç¬¦å·æ´æ°ã
BigInt.asUintN()
å°ä¸ä¸ª BigInt å¼è½¬æ¢ä¸º 0 ä¸ 2^(width) - 1 ä¹é´çæ ç¬¦å·æ´æ°ã
BigInt.prototype.toLocaleString()
è¿åæ¤æ°åç language-sensitive å½¢å¼çå符串ãè¦ç Object.prototype.toLocaleString()
æ¹æ³ã
BigInt.prototype.toString()
è¿å以æå®åºæ° (base) 表示æå®æ°åçå符串ãè¦ç Object.prototype.toString()
æ¹æ³ã
BigInt.prototype.valueOf()
è¿åæå®å¯¹è±¡çåºå
å¼ãè¦ç Object.prototype.valueOf()
æ¹æ³ã
ç±äºå¨ Number
ä¸ BigInt
ä¹é´è¿è¡è½¬æ¢ä¼æå¤±ç²¾åº¦ï¼å è建议ä»
å¨å¼å¯è½å¤§äº 2^53 æ¶ä½¿ç¨ BigInt
ç±»åï¼å¹¶ä¸ä¸å¨ä¸¤ç§ç±»åä¹é´è¿è¡ç¸äºè½¬æ¢ã
ç±äºå¯¹ BigInt
çæä½ä¸æ¯å¸¸æ°æ¶é´çï¼å è BigInt
ä¸éåç¨äºå¯ç å¦ã
å¯¹ä»»ä½ BigInt
å¼ä½¿ç¨ JSON.stringify()
é½ä¼å¼å TypeError
ï¼å 为é»è®¤æ
åµä¸ BigInt
å¼ä¸ä¼å¨ JSON
ä¸åºååã使¯ï¼å¦æéè¦ï¼å¯ä»¥å®ç° toJSON
æ¹æ³ï¼
BigInt.prototype.toJSON = function () {
return this.toString();
};
JSON.stringify
ç°å¨çæå¦ä¸å符串ï¼è䏿¯æåºå¼å¸¸ï¼
JSON.stringify(BigInt(1));
// '"1"'
ç¤ºä¾ è®¡ç®è´¨æ°
function isPrime(n) {
if (n < 2n) {
return false;
}
if (n % 2n === 0n) {
return n === 2n;
}
for (let factor = 3n; factor * factor <= n; factor += 2n) {
if (n % factor === 0n) {
return false;
}
}
return true;
}
// æ¥æ¶ä¸ä¸ª BigInt å¼åæ°ï¼ä»¥ BigInt å¼è¿å第 n 个质æ°å¼
function nthPrime(nth) {
let maybePrime = 2n;
let prime = 0n;
while (nth >= 0n) {
if (isPrime(maybePrime)) {
nth--;
prime = maybePrime;
}
maybePrime++;
}
return prime;
}
nthPrime(20n);
// 73n
夿³¨ï¼ isPrime()
å®ç°ä»
便¼ç¤ºãå¨å®é
åºç¨ä¸ï¼ä¸ºäºé¿å
éå¤è®¡ç®ï¼ä¼ä½¿ç¨å¤§éè®°å¿åçç®æ³ï¼ä¾å¦åæææ¯ç¹å°¼çæ³ã
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