在 JavaScript 中,数值类型通常包括整数和浮点数,但是有时候我们需要处理超出正常整数表示范围的数字,例如处理金融交易或使用密码算法等。ES12 新增的 BigInt 类型让 JavaScript 能够处理大整数,这使得我们能够更轻松地编写高效和安全的代码。
BigInt 基础
BigInt 类型与 Number 类型在使用上略有不同。Number 类型只能表示 2 的 53 次方以内的整数,任何超出这个范围的数字都会被自动转换成浮点数。而 BigInt 类型可以表示任意大小的整数,同时可进行基本的数值操作,比如加、减、乘、除,以及位运算等。
要声明一个 BigInt,需要在数字后面加上 n 标识符。例如:
const big = 1234567890123456789012345678901234567890n;
BigInt 的操作
与 Number 不同,BigInt 是一种不可变类型,这意味着所有的基本操作都会返回一个新的 BigInt 对象。以下是 BigInt 的几个基本操作:
加法
const a = BigInt(1234); const b = BigInt(5678); const sum = a + b; console.log(sum); // 输出 6912n
减法
const a = BigInt(9876); const b = BigInt(5432); const diff = a - b; console.log(diff); // 输出 4444n
乘法
const a = BigInt(1234); const b = BigInt(5678); const product = a * b; console.log(product); // 输出 7006652n
除法
const a = BigInt(987654321); const b = BigInt(1234); const quotient = a / b; console.log(quotient); // 输出 799711n
位运算
-- -------------------- ---- ------- ----- - - --------------- ----- - - --------------- ----- --- - - - -- ----------------------------- -- -- ---- ----- -- - - - -- ---------------------------- -- -- ---- ----- --- - - - -- ----------------------------- -- -- --- ----- ---------- - - -- -- ------------------------------------ -- -- -- ----- --------- - - -- -- ----------------------------------- -- -- ------
BigInt 的转换与比较
BigInt 可以通过一些方法进行转换,例如可以使用 Number() 方法将 BigInt 转换为 Number 类型,不过需要注意超过 2 的 53 次方的数字会转换成 Infinity。我们还可以使用 BigInt() 方法将 Number 转换为 BigInt 类型。
对于 BigInt 的比较操作,可以使用标准的比较运算符,例如 <、>、<=、>= 以及 === 和 !==。需要注意的是,不能将 BigInt 与 Number 进行比较,因为它们被视为完全不同的类型。
应用示例
现在让我们看一个示例,根据斐波那契数列打印出指定长度的结果,这个结果会离散的计算大量的整数运算,所以很适合使用 BigInt 进行优化:
-- -------------------- ---- ------- -------- ------------ - ----- ------ - ---- ---- --- ---- - - --- - -- -- ---- - ----- - - -------- - ---- ----- - - -------- - ---- ------------- - --- - ------ ------- - -----------------------------
在执行这个函数后,将会打印出前 100 个斐波那契数列的结果。由于 BigInt 的存在,这个函数可以进行基于大整数的高效轻松地计算。
总结
使用 ES12 中的 BigInt 类型,我们可以轻松处理更大的整数,从而编写高效且安全的 JavaScript 代码。需要注意,BigInt 并不能完全替代 Number,因为它仍然会占用更多的内存,同时也不支持浮点数运算。使用 BigInt 时,需要注意数据类型的转换和比较,以确保代码的正确性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6458f61c968c7c53b0b427a8