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;
// ì«ì를 bigintë¡
alert(bigint + BigInt(number)); // 3
// bigint를 ì«ìë¡
alert(Number(bigint) + number); // 3
í ë³íê³¼ ê´ë ¨ë ì°ì°ì íì ì¡°ì©í ëìí©ëë¤. ì ë ìë¬ë¥¼ ë°ììí¤ì§ ìì£ . ê·¸ë°ë° bigintê° ë무 커ì ì«ìíìì íì©íë ì릿ì를 ëì¼ë©´ ëë¨¸ì§ ë¹í¸ë ìëì¼ë¡ ìë ¤ ëê°ëë¤. ì´ë° ì ì ì¼ëíê³ í ë³íì í´ì¼ í©ëë¤.
ë¨í ë§ì
ì°ì°ì +value를 ì¬ì©íë©´ value를 ìì½ê² ì«ìíì¼ë¡ ë°ê¿ ì ììµëë¤.
ê·¸ë°ë° í¼ëì ë°©ì§í기 ìí´ bigint를 ëìì¼ë¡ íë ì°ì°ìì ë¨í ë§ì ì°ì°ì를 ì§ìíì§ ììµëë¤.
let bigint = 1n;
alert( +bigint ); // ìë¬
bigint를 ì«ìíì¼ë¡ ë°ê¿ ëë Number()를 ì¬ì©í´ì¼ í©ëë¤.
ë¹êµ ì°ì°ì
ë¹êµ ì°ì°ì <, >ë bigintì ì¼ë° ì«ì 모ëì ì¬ì©í ì ììµëë¤.
alert( 2n > 1n ); // true
alert( 2n > 1 ); // true
ê·¸ë°ë° ë¹êµíë ¤ë ëìì´ ë¤ë¥¸ íì
ì ìíë©´ ==를 ì¬ì©í ëë ê°ìì§ ëª¨ë¥´ì§ë§ ===를 ì¬ì©í ëë ë¤ë¥´ë¤ê³ íë¨ë©ëë¤.
alert( 1 == 1n ); // true
alert( 1 === 1n ); // false
ë ¼ë¦¬ ì°ì°
bigintë if ìì´ë ë¤ë¥¸ ë
¼ë¦¬ ì°ì°ìì í¨ê» ì¬ì©í ë ì¼ë° ì«ìì ëì¼íê² íëí©ëë¤.
ifììì 0nì falsyì´ê³ ë¤ë¥¸ ê°ë¤ì truthyë¡ íê°ëì£ .
if (0n) {
// ì ë ì¤íëì§ ììµëë¤.
}
||, && ë±ì ë
¼ë¦¬ ì°ì°ì를 bigintì ì ì©í ëë ì¼ë° ì«ìì ì ì¬íê² ëìí©ëë¤.
alert( 1n || 2 ); // 1 (1nì truthyë¡ íë¨ë©ëë¤.)
alert( 0n || 2 ); // 2 (0nì falsyë¡ íë¨ë©ëë¤.)
í´ë¦¬í
bigint í´ë¦¬íì ë§ëë ê²ì 꽤 ê¹ë¤ë¡ìµëë¤. +, -를 ë¹ë¡¯í ë¤ìí ì°ì°ìë¤ì´ bigintì ì¼ë° ì«ììì ë¤ë¥¸ 결과를 ë³´ì´ê¸° ë문ì
ëë¤.
bigintë¼ë¦¬ ëëë©´ íì bigint를 ë°ííë¤ë ê²ì ìì ë§ìë린 ë° ììµëë¤.
ëì¼í ê²°ê³¼ê° ëì¤ê² íë ¤ë©´ í´ë¦¬íìì 기존 ì½ë를 ë¶ìíê³ ë´ì¥ ì°ì°ì 모ë를 ê´ë ¨ í¨ìë¡ ëì²´í´ ì¤ ì ìì´ì¼ í©ëë¤. ê·¸ë°ë° ì´ë ê² íë ¤ë©´ íì´ ë§ì´ ë¤ê³ ì±ë¥ ì´ìë ì길 ì ììµëë¤.
ë°ë¼ì ìì§ê¹ì§ ì ëë¡ ë bigint í´ë¦¬íì´ ëì¤ì§ ìì ìí©ì ëë¤.
ì ìë ¤ì§ í´ë¦¬íì ìì§ë§ JSBI ë¼ì´ë¸ë¬ë¦¬ì ê°ë°ìë¤ì´ ëìì ì ìí긴 íìµëë¤.
ì´ ë¼ì´ë¸ë¬ë¦¬ë ìì²´ì ì¼ë¡ ë§ë ë°©ë²ì ì¬ì©í´ í° ì«ì를 구íí©ëë¤. ìì bigintëì ë¼ì´ë¸ë¬ë¦¬ìì ë§ë ì«ì를 ì¬ì©íë ê² ëìì´ ë ì ììµëë¤.
| ì°ì° | ë¤ì´í°ë¸ BigInt |
JSBI |
|---|---|---|
| ì¼ë° ì«ì를 ì¬ì©í´ bigintë§ë¤ê¸° | a = BigInt(789) |
a = JSBI.BigInt(789) |
| ë§ì | c = a + b |
c = JSBI.add(a, b) |
| ëºì | c = a - b |
c = JSBI.subtract(a, b) |
| ⦠| ⦠| ⦠|
ì´ë ê² JSBI를 ì¬ì©í´ ì«ì를 ë§ë ë¤ì ë°ë²¨ íë¬ê·¸ì¸ì ìë í´ë¦¬íì ì¬ì©í´ JSBI í¸ì¶ì ë¤ì´í°ë¸ bigintë¡ ë³ííë©´ ìíë ë¸ë¼ì°ì ìì ì°ì°ì ìíí ì ììµëë¤.
In other words, this approach suggests that we write code in JSBI instead of native bigints. But JSBI works with numbers as with bigints internally, emulates them closely following the specification, so the code will be âbigint-readyâ.
We can use such JSBI code âas isâ for engines that donât support bigints and for those that do support â the polyfill will convert the calls to native bigints.
ëê¸
<code>í그를, ì¬ë¬ ì¤ë¡ 구ì±ë ì½ë를 ì½ì íê³ ì¶ë¤ë©´<pre>í그를 ì´ì©íì¸ì. 10ì¤ ì´ìì ì½ëë plnkr, JSBin, codepen ë±ì ìëë°ì¤ë¥¼ ì¬ì©íì¸ì.