BigInt ng JavaScript

JavaScript BigInt 变量用于存储太大而无法用普通 JavaScript 数字表示的大整数值。

JavaScript 整数精度

JavaScript 整数最多只能精确到 15 位:

整数精度

let x = 999999999999999;
let y = 9999999999999999;

亲自试一试

在 JavaScript 中,所有数字都以 64 位浮点格式(IEEE 754 标准)存储。

根据此标准,大整数无法被精确表示,会被四舍五入。

因此,JavaScript 只能安全地表示以下范围内的整数:

  • 最大为 9007199254740991(253-1)
  • 最小为 ,53-1))

超出此范围的整数值会失去精度。

如何创建 BigInt

如需创建 BigInt,可以在整数末尾添加 n,或调用 BigInt() 函数:

例子 1

let x = 9999999999999999;
let y = 9999999999999999n;

亲自试一试

例子 2

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

亲自试一试

BigInt:一种新的 JavaScript 数据类型

BigInt 的 JavaScript 类型是 "bigint

实例

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

亲自试一试

BigInt 是 JavaScript 中的第二个数值数据类型(在 Number 之后)。

对于 BigInt,JavaScript 支持的数据类型总数为 8 种:

  1. String
  2. Number
  3. Bigint
  4. Boolean
  5. Undefined
  6. Null
  7. Symbol
  8. Object

BigInt 运算符

可用于 JavaScript Number 的运算符也可用于 BigInt。

实例 Multiply BigInt

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

亲自试一试

ការកត់សម្គាល់

មិនអាចធ្វើប្រតិបត្តិការអាករវត្តិទាំងអស់រវាង BigInt និង Number (ការប្រើប្រាស់ប្រភេទបញ្ជាក់ច្បាស់នឹងបោះបង់ពត៌មាន):

BigInt មិនអាចធ្វើប្រតិបត្តិការ shift right unsigned (>>>), ពីព្រោះវាមិនមានទំហំមួយត្រឹមត្រូវ:

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;

亲自试一试

BigInt ក្នុងទ្រង់រឿងកំណត់ត្រារៀន អរុណតាម បរិយាកាស ឬក៏ទ្រង់រឿងកំណត់ត្រារៀន

BigInt ក៏អាចបានសរសេរក្នុងទ្រង់រឿងកំណត់ត្រារៀន អរុណតាម បរិយាកាស ឬក៏ទ្រង់រឿងកំណត់ត្រារៀន:

ឧទាហរណ៍ BigInt ក្នុងទ្រង់រឿងកំណត់ត្រារៀន

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

亲自试一试

Precision Curiosity

ការបញ្ចុះបញ្ចូលអាចប៉ះពាល់ដល់សុវត្ថិភាពនៃកម្មវិធី:

ឧទាហរណ៍ MAX_SAFE_INTEGER

9007199254740992 === 9007199254740993; // គឺ true !!!

亲自试一试

ការគាំទ្ររបស់កម្មវិធីអ៊ីនធើណិត

តាំងពីខែកញ្ញា 2020 ទៅមុខ គ្រប់កម្មវិធីអ៊ីនធើណិតទាំងអស់បានគាំទ្រ BigInt:

Chrome Edge Firefox Safari Opera
Chrome 67 Edge 79 Firefox 68 Safari 14 Opera 54
ខែឧសភា 2018 ខែមករា 2020 ខែកក្កដា 2019 ខែកញ្ញា 2020 ខែមិថុនា 2018

ចំនួនតួលេខសុវត្ថិភាពតិចនិងច្រើន

ES6 ថែមទាំងបានបន្ថែមលក្ខណៈ max និង min ទៅអត្ថប្រយោជន៍ Number:

  • MAX_SAFE_INTEGER
  • MIN_SAFE_INTEGER

ឧទាហរណ៍ MAX_SAFE_INTEGER

let x = Number.MAX_SAFE_INTEGER;

亲自试一试

ឧទាហរណ៍ MIN_SAFE_INTEGER

let x = Number.MIN_SAFE_INTEGER;

亲自试一试

មុខងារតួលេខថ្មី

ES6 ថែមទាំងបានបន្ថែមមួយនិងមួយថ្មីទៅអត្ថប្រយោជន៍ Number:

  • Number.isInteger()
  • Number.isSafeInteger()

Number.isInteger() 方法

如果参数是整数,则 Number.isInteger() 方法返回 true

isInteger() 实例

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

亲自试一试

Number.isSafeInteger() 方法

安全整数是可以精确表示为双精度数的整数。

如果参数是安全整数,则 Number.isSafeInteger() 方法返回 true

isSafeInteger() 实例

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

亲自试一试

安全整数是从 -(253 - 1) 到 +(253 - 1) 的所有整数。

这是一个安全整数:9007199254740991。这不是一个安全整数:9007199254740992。