在 JavaScript 中,Number 类型的表示范围是有限的,它可以表示的最大值为 2^53 - 1,而超出这个范围的数字就无法表示了。为了解决这个问题,并支持更大范围的数字计算,ES12 中引入了 BigInt 数据类型。下面我们来详细了解如何正确使用 BigInt 进行数字计算。
BigInt 数据类型
BigInt 是 ES12 中新增的一个基本数据类型,用来表示任意大小的整数。在创建 BigInt 变量时,需要在整数后面加上 n 或者使用 BigInt() 函数来创建。
const a = 123456789012345678901234567890n; const b = BigInt('123456789012345678901234567890');
BigInt 运算与计算
与 Number 类型类似,BigInt 类型也支持基本运算符 +、-、* 和 /,但需要注意的是同种类型的操作数才能进行运算。
const a = 123456789012345678901234567890n; const b = 98765432109876543210987654321n; console.log(a + b); // 123456789111111111112345679543211n console.log(a - b); // 123456789012247913469182802269n console.log(a * b); // 12193263113702179566030169430314006774585923265784013087502570n console.log(a / b); // 12498020603n
除了基本运算符,还可以使用 BigInt 提供的一些方法来进行计算,如 abs()、pow()、sqrt() 等。
const a = -123456789012345678901234567890n; console.log(a.abs()); // 123456789012345678901234567890n const b = 2n; console.log(b.pow(100)); // 1267650600228229401496703205376n const c = 9876543210987654321n; console.log(c.sqrt()); // 99379764021n
需要注意的是,BigInt 类型不能与 Number 类型混用,否则会抛出 TypeError 错误。
const a = 123456789012345678901234567890n; const b = 123; console.log(a + b); // TypeError: Cannot mix BigInt and other types
BigInt 与常规数值的转换
在实际开发中,常常需要将 BigInt 类型与其他数据类型进行转换。对于 BigInt 类型,可以使用 Number() 将其转换为 Number 类型,但需要注意转换后可能会丢失精度或导致溢出。
const a = 123456789012345678901234567890n; const b = Number(a); console.log(b); // 1.2345678901234568e+29
将 BigInt 转换为字符串则需要使用 String() 函数。
const a = 123456789012345678901234567890n; const b = String(a); console.log(b); // "123456789012345678901234567890"
反过来,将字符串转换为 BigInt 则需要使用 BigInt() 函数。
const a = '123456789012345678901234567890'; const b = BigInt(a); console.log(b); // 123456789012345678901234567890n
总结
在 ES12 中,BigInt 数据类型提供了一种全新的处理大整数的方式。除了基本运算符外,还有许多方便的计算方法可以使用。需要注意的是,与 Number 类型不能混用,需要注意类型转换的问题。在实际开发中,合理使用 BigInt 数据类型可以提高代码的执行效率并解决一些数值计算问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64ef5643f6b2d6eab39578b9