前端面试 【JavaScript】— 什么是BigInt? 谈谈你对它的认识
2021/11/15 1:10:17
本文主要是介绍前端面试 【JavaScript】— 什么是BigInt? 谈谈你对它的认识,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1. 什么是BigInt?
BigInt是一种新的数据类型,用于当整数值大于Number数据类型支持的范围时。这种数据类型允许我们安全地对大整数执行算术操作,表示高分辨率的时间戳,使用大整数ID等等,而不需要使用库。
2. 为什么需要BigInt?
在JS中,所有的数字都以双精度64位浮点格式表示,那这会带来什么问题呢?
这导致JS中的Number无法精确表示非常大的整数,它会将非常大的整数四舍五入,确切地说,JS中的 Number类型只能安全地表示-9007199254740991(-(2^53-1))和9007199254740991((2^53-1)),任何超出此范围的整数值都可能失去精度。
console.log(9999999999999999999); // 10000000000000000000
同时也会有一定的安全性问题:
console.log(9007199254740992 === 9007199254740993); // true 居然是true!
3. 如何创建并使用BigInt?
要创建BigInt,只需要在数字末尾追加n即可。
console.log(9007199254740995); // 9007199254740996 console.log(9007199254740995n); // 9007199254740995n
另一种创建BigInt的方法是用BigInt()构造函数。
var num = BigInt("9007199254740995"); console.log(num); // 9007199254740995n
简单使用如下:
console.log(10n + 20n); // 30n console.log(10n - 20n); // -10n console.log(-10n); // -10n console.log(10n * 20n); // 200n console.log(20n / 10n); // 2n console.log(23n % 10n); // 3n console.log(10n ** 3n); // 1000n let x = 10n; console.log(++x); // 11n console.log(--x); // 10n console.log(typeof x); // bigint console.log(+10n); // TypeError: Cannot convert a BigInt value to a number
需要注意的事项:
1. BigInt不支持一元加号运算符,这可能是某些程序可能依赖于 + 始终生成 Number 的不变量,或者抛出异常。另外,更改 + 的行为也会破坏 asm.js代码;
2. 因为隐式类型转换可能丢失信息,所以不允许在 bigint 和 Number 之间进行混合操作。当混合使用大整数和浮点数时,结果值可能无法由BigInt或Number精确表示;
console.log(10 + 20n); // Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions
3. 不能将BigInt传递给Web api 和内置的 JS 函数,这些函数需要一个 Number 类型的数字,尝试这样做会报TypeError错误;
Math.max(2n, 4n, 6n); // Uncaught TypeError: Cannot convert a BigInt value to a number
4. 当 Boolean 类型与 BigInt 类型相遇时,BigInt的处理方式与Number类似,换句话说,只要不是 0n,BigInt就被视为truthy的值;
if(0n){ // 判断为false } if(3n){ // 判断为true }
5. 元素都为BigInt的数组可以进行sort排序;
6. BigInt可以正常地进行位运算,如 |、&、> 和 ^。
览器兼容性
Caniuse 前端兼容性工具查询的结果:
主流的浏览器几乎都支持了,但要成为规范,还要很长的路要走。
这篇关于前端面试 【JavaScript】— 什么是BigInt? 谈谈你对它的认识的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-09必试!帮 J 人团队解决物流错发漏发的软件神器!
- 2025-01-09不容小觑!助力 J 人物流客服安抚情绪的软件!
- 2025-01-09为什么医疗团队协作离不开智能文档工具?
- 2025-01-09惊叹:J 人团队用啥软件让物流服务快又准?
- 2025-01-09如何利用数据分析工具优化项目资源分配?4种工具推荐
- 2025-01-09多学科协作难?这款文档工具可以帮你省心省力
- 2025-01-09团队中的技术项目经理TPM:工作内容与资源优化策略
- 2025-01-09JIT生产管理法:优化流程,提升竞争力的秘诀
- 2025-01-092024全球互联网流量分析报告
- 2025-01-09如何提升学校行政管理中的进度追踪效率?4个实用策略和3款工具推荐