จาวาสคริปต์บิ๊กอินท์


สารบัญ

    แสดงสารบัญ

ตัวแปร JavaScript BigInt ใช้ในการจัดเก็บค่าจำนวนเต็มขนาดใหญ่ ที่มีขนาดใหญ่เกินกว่าจะแสดงด้วย Number ของ JavaScript ปกติ

ความแม่นยำของจำนวนเต็ม JavaScript

จำนวนเต็ม JavaScript มีความแม่นยำสูงสุด 15 หลักเท่านั้น:

ความแม่นยำจำนวนเต็ม

let x = 999999999999999;
let y = 9999999999999999;

ลองด้วยตัวคุณเอง →

<!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>


ใน JavaScript ตัวเลขทั้งหมดจะถูกจัดเก็บในรูปแบบทศนิยม 64 บิต (มาตรฐาน IEEE 754)

ตามมาตรฐานนี้ ไม่สามารถแสดงจำนวนเต็มขนาดใหญ่ได้พอดีและจะถูกปัดเศษ

ด้วยเหตุนี้ JavaScript จึงสามารถแสดงเฉพาะจำนวนเต็มได้อย่างปลอดภัยเท่านั้น:

สูงสุด 9007199254740991 +(253-1)

และ

ลงไปที่ -9007199254740991 -(253-1)

ค่าจำนวนเต็มที่อยู่นอกช่วงนี้จะสูญเสียความแม่นยำ


วิธีการสร้าง BigInt

หากต้องการสร้าง BigInt ให้เติม n ต่อท้ายจำนวนเต็มหรือการโทร <รหัส class="w3-codespan">BigInt():

ตัวอย่าง

let x = 9999999999999999;
let y = 9999999999999999n;

ลองด้วยตัวคุณเอง →

<!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)

ลองด้วยตัวคุณเอง →

<!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: ประเภทข้อมูล JavaScript ใหม่

JavaScript typeof และ BigInt คือ "bigint":

ตัวอย่าง

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

ลองด้วยตัวคุณเอง →

<!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>


BigInt เป็นข้อมูลตัวเลขประเภทที่สองใน JavaScript (หลัง หมายเลข)

ด้วย BigInt จำนวนประเภทข้อมูลที่รองรับใน JavaScript คือ 8:

1. สตริง
2. หมายเลข
3. บิ๊กจินต์
4. บูลีน
5. ไม่ได้กำหนด
6. ว่าง
7. สัญลักษณ์
8. วัตถุ


ผู้ประกอบการ BigInt

ตัวดำเนินการที่สามารถใช้กับ JavaScript Number ยังสามารถใช้ได้กับ BigInt

ตัวอย่างการคูณ BigInt

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

ลองด้วยตัวคุณเอง →

<!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>

หมายเหตุ

เลขคณิตระหว่าง BigInt และไม่อนุญาตให้ใช้ ตัวเลข (การแปลงประเภทสูญเสียข้อมูล)

ไม่สามารถทำการเลื่อนไปทางขวาที่ไม่ได้ลงนาม (>>>) บน BigInt (ไม่มีความกว้างคงที่)


ทศนิยม BigInt

BigInt ไม่สามารถมีทศนิยมได้

ตัวอย่างแผนก BigInt

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;

ลองด้วยตัวคุณเอง →

<!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, Octal และ Binary

BigInt ยังสามารถเขียนในรูปแบบเลขฐานสิบหก ฐานแปด หรือไบนารีได้:

ตัวอย่าง BigInt Hex

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

ลองด้วยตัวคุณเอง →

<!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>

ความอยากรู้อยากเห็นที่แม่นยำ

การปัดเศษอาจทำให้ความปลอดภัยของโปรแกรมลดลง:

ตัวอย่าง MAX_SAFE_INTEGER

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

ลองด้วยตัวคุณเอง →

<!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>

รองรับเบราว์เซอร์

BigInt ได้รับการสนับสนุนในทุกเบราว์เซอร์ตั้งแต่เดือนกันยายน 2020:

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


จำนวนเต็มปลอดภัยขั้นต่ำและสูงสุด

ES6 เพิ่มคุณสมบัติสูงสุดและต่ำสุดให้กับวัตถุ Number:

  • <รหัส class="w3-codespan">MAX_SAFE_INTEGER

  • <รหัส class="w3-codespan">MIN_SAFE_INTEGER

ตัวอย่าง MAX_SAFE_INTEGER

let x = Number.MAX_SAFE_INTEGER;

ลองด้วยตัวคุณเอง →

<!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

let x = Number.MIN_SAFE_INTEGER;

ลองด้วยตัวคุณเอง →

<!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>

วิธีการจำนวนใหม่

ES6 ยังเพิ่ม 2 วิธีใหม่ให้กับวัตถุ Number:

  • Number.isInteger()

  • Number.isSafeInteger()


วิธีการ Number.isInteger()

Number.isInteger() วิธีการส่งกลับ true ถ้าอาร์กิวเมนต์เป็นจำนวนเต็ม

ตัวอย่าง: isInteger()

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

ลองด้วยตัวคุณเอง →

<!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>

วิธีการ Number.isSafeInteger()

จำนวนเต็มที่ปลอดภัยคือจำนวนเต็มที่สามารถแสดงเป็นตัวเลขทศนิยมสองเท่าได้

วิธีการ Number.isSafeInteger() จะส่งคืน true หากอาร์กิวเมนต์เป็นจำนวนเต็มที่ปลอดภัย

ตัวอย่าง isSafeInteger()

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

ลองด้วยตัวคุณเอง →

<!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>

จำนวนเต็มที่ปลอดภัยคือจำนวนเต็มทั้งหมดตั้งแต่ -(253 - 1) ถึง +(253 - 1).
สิ่งนี้ปลอดภัย: 9007199254740991 สิ่งนี้ไม่ปลอดภัย: 9007199254740992