BigInt æ¯ä¸ç§ç¹æ®çæ°åç±»åï¼å®æä¾äºå¯¹ä»»æé¿åº¦æ´æ°çæ¯æã
å建 bigint çæ¹å¼æä¸¤ç§ï¼å¨ä¸ä¸ªæ´æ°åé¢éåé¢å n æè
è°ç¨ BigInt 彿°ï¼è¯¥å½æ°ä»åç¬¦ä¸²ãæ°åçä¸çæ bigintã
const bigint = 1234567890123456789012345678901234567890n;
const sameBigint = BigInt("1234567890123456789012345678901234567890");
const bigintFromNumber = BigInt(10); // ä¸ 10n ç¸å
æ°å¦è¿ç®ç¬¦
BigInt 大夿°æ
åµä¸å¯ä»¥åå¸¸è§æ°åç±»å䏿 ·ä½¿ç¨ï¼ä¾å¦ï¼
alert(1n + 2n); // 3
alert(5n / 2n); // 2
请注æï¼é¤æ³ 5/2 çç»æåé¶è¿è¡èå
¥ï¼èå
¥åå¾å°çç»ææ²¡æäºå°æ°é¨åã对 bigint çæææä½ï¼è¿åçç»æä¹æ¯ bigintã
æä»¬ä¸å¯ä»¥æ bigint åå¸¸è§æ°åç±»åæ··å使ç¨ï¼
alert(1n + 2); // Error: Cannot mix BigInt and other types
妿æéè¦ï¼æä»¬åºè¯¥æ¾å¼å°è½¬æ¢å®ä»¬ï¼ä½¿ç¨ BigInt() æè
Number()ï¼åè¿æ ·ï¼
let bigint = 1n;
let number = 2;
// å° number 转æ¢ä¸º bigint
alert(bigint + BigInt(number)); // 3
// å° bigint 转æ¢ä¸º number
alert(Number(bigint) + number); // 3
è½¬æ¢æä½å§ç»æ¯éé»çï¼ç»ä¸ä¼æ¥éï¼ä½æ¯å¦æ bigint å¤ªå¤§èæ°åç±»åæ æ³å®¹çº³ï¼å伿ªæå¤ä½çä½ï¼å æ¤æä»¬åºè¯¥è°¨æ è¿è¡æ¤ç±»è½¬æ¢ã
ä¸å
å æ³è¿ç®ç¬¦ +valueï¼æ¯å¤§å®¶çç¥çå° value è½¬æ¢ææ°åç±»åçæ¹æ³ã
为äºé¿å æ··æ·ï¼å¨ bigint ä¸ä¸æ¯æä¸å å æ³ï¼
let bigint = 1n;
alert( +bigint ); // error
æä»¥æä»¬åºè¯¥ç¨ Number() æ¥å°ä¸ä¸ª bigint è½¬æ¢æä¸ä¸ªæ°åç±»åã
æ¯è¾è¿ç®ç¬¦
æ¯è¾è¿ç®ç¬¦ï¼ä¾å¦ < å >ï¼ä½¿ç¨å®ä»¬æ¥å¯¹ bigint å number ç±»åçæ°åè¿è¡æ¯è¾æ²¡æé®é¢ï¼
alert( 2n > 1n ); // true
alert( 2n > 1 ); // true
使¯è¯·æ³¨æï¼ç±äº number å bigint å±äºä¸åç±»åï¼å®ä»¬å¯è½å¨è¿è¡ == æ¯è¾æ¶ç¸çï¼ä½å¨è¿è¡ ===ï¼ä¸¥æ ¼ç¸çï¼æ¯è¾æ¶ä¸ç¸çï¼
alert( 1 == 1n ); // true
alert( 1 === 1n ); // false
å¸å°è¿ç®
å½å¨ if æå
¶ä»å¸å°è¿ç®ä¸æ¶ï¼bigint çè¡ä¸ºç±»ä¼¼äº numberã
ä¾å¦ï¼å¨ if ä¸ï¼bigint 0n 为åï¼å
¶ä»å¼ä¸º trueï¼
if (0n) {
// æ°¸è¿ä¸ä¼æ§è¡
}
å¸å°è¿ç®ç¬¦ï¼ä¾å¦ ||ï¼&& åå
¶ä»è¿ç®ç¬¦ï¼å¤ç bigint çæ¹å¼ä¹ç±»ä¼¼äº numberï¼
alert( 1n || 2 ); // 1ï¼1n 被认为æ¯çï¼
alert( 0n || 2 ); // 2ï¼0n 被认为æ¯åï¼
Polyfill
Polyfilling bigint æ¯è¾æ£æãåå æ¯è®¸å¤ JavaScript è¿ç®ç¬¦ï¼æ¯å¦ + å - çï¼å¨å¯¹å¾
bigint çè¡ä¸ºä¸ä¸å¸¸è§ number ç¸æ¯ææä¸åã
ä¾å¦ï¼bigint ç餿³æ»æ¯è¿å bigintï¼å¦æéè¦ï¼ä¼è¿è¡èå ¥ï¼ã
æ³è¦æ¨¡æè¿ç§è¡ä¸ºï¼polyfill éè¦åæä»£ç ï¼å¹¶ç¨å ¶å½æ°æ¿æ¢æææ¤ç±»è¿ç®ç¬¦ã使¯è¿æ ·åå¾éº»ç¦ï¼å¹¶ä¸ä¼èè´¹å¾å¤æ§è½ã
æä»¥ï¼ç®å并没æä¸ä¸ªä¼æå¨ç¥ç好ç¨ç polyfillã
ä¸è¿ï¼JSBI åºçå¼åè æåºäºå¦ä¸ç§è§£å³æ¹æ¡ã
该åºä½¿ç¨èªå·±çæ¹æ³å®ç°äºå¤§çæ°åãæä»¬å¯ä»¥ä½¿ç¨å®ä»¬æ¿ä»£åçç bigintï¼
| è¿ç® | åç BigInt |
JSBI |
|---|---|---|
| ä» Number å建 | a = BigInt(789) |
a = JSBI.BigInt(789) |
| å æ³ | c = a + b |
c = JSBI.add(a, b) |
| åæ³ | c = a - b |
c = JSBI.subtract(a, b) |
| ⦠| ⦠| ⦠|
â¦â¦ç¶åï¼å¯¹äºé£äºæ¯æ bigint çæµè§å¨ï¼å¯ä»¥ä½¿ç¨ polyfillï¼Babel æä»¶ï¼å° JSBI è°ç¨è½¬æ¢ä¸ºåçç bigintã
æ¢å¥è¯è¯´ï¼è¿ä¸ªæ¹æ³å»ºè®®æä»¬å¨åä»£ç æ¶ä½¿ç¨ JSBI æ¿ä»£åçç bigintã使¯ JSBI å¨å é¨åä½¿ç¨ bigint 䏿 ·ä½¿ç¨ numberï¼å¹¶æå¤§ç¨åº¦æç §è§èè¿è¡æ¨¡æï¼æä»¥ä»£ç å·²ç»æ¯åå¤å¥½è½¬æ¢æ bigint çäºï¼bigint-readyï¼ã
对äºä¸æ¯æ bigint çå¼æï¼æä»¬å¯ä»¥âæåæ ·âä½¿ç¨æ¤ç±» JSBI 代ç ï¼å¯¹äºé£äºæ¯æ bigint ç弿 ââ polyfill ä¼å°è°ç¨è½¬æ¢ä¸ºåçç bigintã
è¯è®º
<code>æ ç¾æå ¥åªæå 个è¯ç代ç ï¼æå ¥å¤è¡ä»£ç å¯ä»¥ä½¿ç¨<pre>æ ç¾ï¼å¯¹äºè¶ è¿ 10 è¡ç代ç ï¼å»ºè®®ä½ ä½¿ç¨æ²ç®±ï¼plnkrï¼JSBinï¼codepenâ¦ï¼