在 JavaScript 中,数字类型默认使用 64 位浮点数表示,因此在进行大数计算时会出现精度问题。为了解决这个问题,ES11 引入了一种新的原语类型——bigint,它可以存储更大范围的整数,不会出现精度问题。
BigInt 的定义
BigInt 是一种新的原语类型,用来表示任意精度的整数。它可以表示的范围比 Number 类型更大,可以处理超过 2 的 53 次方的整数。
BigInt 的创建
BigInt 可以通过在数字后添加 n 或者调用 BigInt() 函数来创建。
const bigInt1 = 123456789012345678901234567890n; const bigInt2 = BigInt('123456789012345678901234567890');
BigInt 的运算
与 Number 类型不同,BigInt 不支持加减乘除等常规运算符,需要使用 BigInt 对象上的方法进行运算。
加法
const bigInt1 = 123456789012345678901234567890n; const bigInt2 = BigInt('987654321098765432109876543210'); const result = bigInt1 + bigInt2; console.log(result); // 1111111111111111111111111111100n
减法
const bigInt1 = 123456789012345678901234567890n; const bigInt2 = BigInt('987654321098765432109876543210'); const result = bigInt1 - bigInt2; console.log(result); // 122469135691277777791358024680
乘法
const bigInt1 = 123456789012345678901234567890n; const bigInt2 = BigInt('987654321098765432109876543210'); const result = bigInt1 * bigInt2; console.log(result); // 121932631137021795073918052423095000000000000000000000000n
除法
const bigInt1 = 123456789012345678901234567890n; const bigInt2 = BigInt('987654321098765432109876543210'); const result = bigInt1 / bigInt2; console.log(result); // 125n
BigInt 的比较
与 Number 类型不同,BigInt 比较时需要使用 BigInt 对象上的方法进行比较。
相等比较
const bigInt1 = 123456789012345678901234567890n; const bigInt2 = BigInt('123456789012345678901234567890'); console.log(bigInt1 === bigInt2); // true
大小比较
const bigInt1 = 123456789012345678901234567890n; const bigInt2 = BigInt('987654321098765432109876543210'); console.log(bigInt1 > bigInt2); // false
BigInt 的使用场景
- 处理超过 Number 类型范围的整数计算
- 处理加密算法中的大数运算
注意事项
- BigInt 类型无法与 Number 类型进行运算,需要先将 Number 类型转换为 BigInt 类型
- 在进行字符串拼接时,需要将 BigInt 类型转换为字符串类型
结语
ES11 中引入了 BigInt 类型,可以处理大数计算时的精度问题,拓展了 JavaScript 的数值类型。在实际开发中,我们需要根据具体情况选择使用 Number 类型还是 BigInt 类型。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67da4885a941bf713422be3b