JavaScript BigInt


Tartalomjegyzék

    Tartalomjegyzék megjelenítése

A JavaScript BigInt változók nagy egész értékek tárolására szolgálnak amelyek túl nagyok ahhoz, hogy normál JavaScript számmal ábrázolják őket.

JavaScript Integer pontosság

A JavaScript egész számok csak 15 számjegyig pontosak:

Egész pontosság

let x = 999999999999999;
let y = 9999999999999999;

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>Integer Precision</h2>

<p>Integers (numbers without a period or exponent notation) are accurate up to 15 digits:</p>

<p id="demo"></p>

<script>
let x = 999999999999999;
let y = 9999999999999999;
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>

</body>
</html>


A JavaScriptben minden szám 64 bites lebegőpontos formátumban (IEEE 754 szabvány) van tárolva.

Ezzel a szabvánnyal a nagy egész számokat nem lehet pontosan ábrázolni, ezért kerekítik.

Emiatt a JavaScript csak egész számokat tud biztonságosan ábrázolni:

Akár 9007199254740991 +(253-1)

és

Lefelé: -9007199254740991 -(253-1).

Az ezen a tartományon kívüli egész értékek elvesztik a pontosságot.


Hogyan készítsünk BigInt-et

BigInt létrehozásához fűzze n-t egy egész szám végéhez vagy hívjon BigInt():

Példák

let x = 9999999999999999;
let y = 9999999999999999n;

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>Integer and BigInt</h2>

<p id="demo"></p>

<script>
let x = 9999999999999999;
let y = BigInt("9999999999999999");
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>

</body>
</html>


let x = 1234567890123456789012345n;
let y = BigInt(1234567890123456789012345)

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>Create a BigInt</h2>

<p id="demo"></p>

<script>
let x = 123456789012345678901234567890n;
let y = BigInt("123456789012345678901234567890");
document.getElementById("demo").innerHTML = x + "<br>" + y;
</script>

</body>
</html>



BigInt: Új JavaScript adattípus

A JavaScript típusa egy BigInt a "bigint":

Példa

let x = BigInt(999999999999999);
let type = typeof x;

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>BigInt typeof</h2>

<p>The typeof a BigInt is:</p>
<p id="demo"></p>

<script>
let x = BigInt("9999999999999999");
document.getElementById("demo").innerHTML = typeof x;
</script>

</body>
</html>


A BigInt a JavaScript második numerikus adattípusa (a Szám után).

A BigInt esetén a JavaScriptben támogatott adattípusok teljes száma 8:

1. Karakterlánc
2. Szám
3. Bigint
4. Logikai
5. Undefined
6. Null
7. Szimbólum
8. Tárgy


BigInt operátorok

A JavaScript számon használható operátorok BigInt-on is használható.

BigInt szorzási példa

let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h1>JavScript Bigint</h1>
<h2>BigInt Multiply</h2>
<p>Operators that can be used a Number can be used on a BigInt.</p>
<p id="demo"></p>

<script>
let x = 9007199254740995n;
let y = 9007199254740995n;
let z = x * y;

document.getElementById("demo").innerHTML = z; 
</script>

</body>
</html>

Megjegyzések

Aritmetika BigInt között és a szám nem megengedett (a típuskonverzió elveszíti az információkat).

Előjel nélküli jobb eltolás (>>>) nem hajtható végre BigInt esetén (nincs fix szélessége).


BigInt tizedesjegyek

A BigInt nem tartalmazhat tizedesjegyeket.

Példa a BigInt felosztásra

let x = 5n;
let y = x / 2;
// Error: Cannot mix BigInt and other types, use explicit conversion.
let x = 5n;
let y = Number(x) / 2;

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h1>JavScript Bigint</h1>
<h2>BigInt Divide</h2>

<p>A BigInt can not have decimals.</p>
<p>Cannot mix BigInt and other types, use explicit conversions.</p>
<p id="demo"></p>

<script>
let x = 5n;
let y = Number(x) / 2;

document.getElementById("demo").innerHTML = y; 
</script>

</body>
</html>

BigInt hex, oktális és bináris

A BigInt hexadecimális, oktális vagy bináris jelöléssel is írható:

BigInt Hex példa

let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h1>JavScript Bigint</h1>
<h2>Hex, Octal and Binary</h2>

<p id="demo"></p>


<script>
let hex = 0x20000000000003n;
let oct = 0o400000000000000003n;
let bin = 0b100000000000000000000000000000000000000000000000000011n;

document.getElementById("demo").innerHTML = hex + "<br>" + oct + "<br>" + bin; 
</script>

</body>
</html>

Precíziós kíváncsiság

A kerekítés veszélyeztetheti a program biztonságát:

MAX_SAFE_INTEGER Példa

9007199254740992 === 9007199254740993; // is true !!!

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h1>JavScript Numbers</h1>
<h2>Integer Precision</h2>

<p>Is 9007199254740992 equal to 9007199254740993?</p>

<p id="demo"></p>


<script>
let x = 9007199254740992 === 9007199254740993;
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>

Böngésző támogatás

A BigInt 2020 szeptembere óta minden böngészőben támogatott:

Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
May 2018 Jan 2020 Jul 2019 Sep 2020 Jun 2018


Minimális és maximális biztonságos egész számok

Az ES6 max és min tulajdonságokat adott a Number objektumhoz:

  • MAX_SAFE_INTEGER

  • MIN_SAFE_INTEGER

MAX_SAFE_INTEGER Példa

let x = Number.MAX_SAFE_INTEGER;

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h2>Number Object Properties</h2>

<p>MAX_SAFE_INTEGER</p>

<p id="demo"></p>

<script>
let  x = Number.MAX_SAFE_INTEGER;
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>

MIN_SAFE_INTEGER Példa

let x = Number.MIN_SAFE_INTEGER;

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h2>Number Object Properties</h2>

<p>MIN_SAFE_INTEGER</p>

<p id="demo"></p>

<script>
let  x = Number.MIN_SAFE_INTEGER;
document.getElementById("demo").innerHTML = x;
</script>

</body>
</html>

Új számozási módszerek

Az ES6 két új metódust is hozzáadott a Number objektumhoz:

  • Szám.isInteger()

  • Szám.isSafeInteger()


A Number.isInteger() metódus

A Szám.isInteger() metódus true értékkel tér vissza, ha az argumentum egész szám.

Példa: isInteger()

Number.isInteger(10);
Number.isInteger(10.5);

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>The isInteger() Method</h2>

<p>The isInteger() method returns true if the argument is an integer.</p>
<p>Otherwise it returns false.</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML =
Number.isInteger(10) + "<br>" + Number.isInteger(10.5);
</script>

</body>
</html>

A Number.isSafeInteger() metódus

A biztonságos egész olyan egész szám, amely pontosan dupla pontosságú számként ábrázolható.

A Number.isSafeInteger() metódus true értékkel tér vissza, ha az argumentum biztonságos egész szám.

Példa:SafeInteger()

Number.isSafeInteger(10);
Number.isSafeInteger(12345678901234567890);

Próbálja ki Ön is →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Numbers</h1>
<h2>The isSafeInteger() Method</h2>

<p>The isSafeInteger() method returns true if the argument is a safe integer.</p>
<p>Otherwise it returns false.</p>

<p id="demo"></p>

<script>
document.getElementById("demo").innerHTML =
Number.isSafeInteger(10) + "<br>" + Number.isSafeInteger(12345678901234567890);
</script>

</body>
</html>

A biztonságos egész számok mindegyike -(253 - 1) és +(253 - 1) közötti egész szám.
Ez biztonságos: 9007199254740991. Ez nem biztonságos: 9007199254740992.