在 ES12 中,BigInt 类型被引入,用于表示任意长度的整数。与普通的 Number 类型相比,BigInt 支持更大的数字范围,甚至可以表示整数的最大值,同时也避免了 Number 类型中精度丢失的问题。在实际开发中,我们有时需要在 BigInt 和 Number 之间进行转换,接下来我们就来讨论一下 ES12 中 BigInt 转 Number 和 Number 转 BigInt 的相互转换。
BigInt 转 Number
将 BigInt 类型转换为 Number 类型非常简单,只需要使用 Number() 函数即可,如下所示:
const myBigInt = BigInt(Number.MAX_SAFE_INTEGER) + BigInt(1); // 这里的 BigInt(1) 表示 1n const myNumber = Number(myBigInt); console.log(`myBigInt is ${myBigInt}`); // myBigInt is 9007199254740992n console.log(`myNumber is ${myNumber}`); // myNumber is 9007199254740992
在这里,我们首先定义了一个 BigInt 类型的变量 myBigInt,它的值为 Number 类型中的最大安全整数加上 1。然后我们使用 Number() 函数将 myBigInt 转换为了 Number 类型,并将转换后的值赋予了 myNumber 变量。最后我们打印出了这两个变量的值,可以看到它们分别是 BigInt 类型和 Number 类型的值。
需要注意的是,将一个超出安全整数范围的 BigInt 转换成 Number 类型时,会发生精度丢失的问题,因此这种转换只适用于 BigInt 小于或等于 Number 类型中的最大安全整数的情况。
Number 转 BigInt
将 Number 类型转换为 BigInt 类型比较麻烦,因为 BigInt、Number 两者类型不同,我们需要在将 Number 类型转换为 BigInt 类型时,确保BigInt不会发生精度丢失。为了达到这个目的,我们可以使用 BigInt() 函数,并将 Number 类型数据在传递给 BigInt() 前进行一定的处理。
const myNumber = 9007199254740993; const myBigInt = BigInt(`${myNumber}`); console.log(`myNumber is ${myNumber}`); // myNumber is 9007199254740993 console.log(`myBigInt is ${myBigInt}`); // myBigInt is 9007199254740993n
在这个例子中,我们定义了一个 Number 类型的变量 myNumber,它的值超出了 BigInt 中能够表示的范围。为了将它转换为 BigInt 类型,我们将它首先转换为字符串,然后使用 BigInt() 函数将字符串转换为 BigInt 类型。在这里,需要注意的是,我们需要将超过安全整数范围的 Number 数据转换成 BigInt 类型时,一定要使用字符串模板,并在模板字符串前加上 $ 符号,将 Number 类型的变量转换为字符串,否则 Number 数据将会发生精度丢失。
总结
在 ES12 中,BigInt 提供了一种新的方法来表示超大整数,与普通的 Number 类型相比,BigInt 支持更大的数字范围,并避免了精度丢失的问题。在实际开发中,我们可能需要在 BigInt 和 Number 之间进行转换。通过本文章的学习,我们了解了如何将 BigInt 类型转换为 Number 类型以及如何将 Number 类型转换为 BigInt 类型。希望这篇文章能够对你有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64aba9e848841e9894779eb9