ES6 BigInt:JavaScript语言迎来的大数字

什么是BigInt

在ES6中,BigInt是一种新的数据类型,用于当整数值大于Number数据类型支持的范围时。安全地对大整数执行算术操作。

为什么需要BigInt?

我们知道,js是一门弱类型语言,在ES6之前,所有的数字都是Number类型,都是以双精度64位浮点格式表示,并不像java那样有int,float等,那这样会带来什么问题呢?

这会导致js中的Number无法精确表示非常大的整数,它会将非常大的整数四舍五入,准确的数,js的Number类型只能安全的表示-9007199254740991(-(2^53-1))和9007199254740991(2^53-1),任何超出此范围的整数值都可能失去精度。

js 复制代码
console.log(999999999999999); //=>10000000000000000

同时,也会有一定的安全性问题

js 复制代码
9007199254740992 === 9007199254740993; // → true 居然是true!

如何创建并使用BigInt?

  1. 要创建BigInt,只需要在数字米未追加n即可
js 复制代码
console.log( 90071992547409884n ); // → 90071992547409884n

console.log( 9007199254740995 ); // → 9007199254740996

2.使用BigInt构造函数

js 复制代码
BigInt("9007199254740995"); // → 9007199254740995n

简单的使用如下

js 复制代码
10n + 20n; // → 30n

10n - 20n; // → -10n

+10n; // → TypeError: Cannot convert a BigInt value to a number

-10n; // → -10n

10n * 20n; // → 200n

20n / 10n; // → 2n

23n % 10n; // → 3n

10n ** 3n; // → 1000n

const x = 10n;

++x; // → 11n

--x; // → 9n

console.log(typeof x); //"bigint"

需要注意的是:

1)BigInt不支持一元加号运算符, 这可能是某些程序可能依赖于 + 始终生成 Number 的不变量,或者抛

出异常。另外,更改 + 的行为也会破坏 asm.js代码。

2)因为隐式类型转换可能丢失信息,所以不允许在bigint和 Number 之间进行混合操作。当混合使用大

整数和浮点数时,结果值可能无法由BigInt或Number精确表示。

3)不能将BigInt传递给Web api和内置的 JS 函数,这些函数需要一个 Number 类型的数字。尝试这样

做会报TypeError错误。

js 复制代码
console.log(999999999999999); //=>10000000000000000

9007199254740992 === 9007199254740993; // → true 居然是true!

console.log( 9007199254740995n ); // → 9007199254740995n

console.log( 9007199254740995 ); // → 9007199254740996

BigInt("9007199254740995"); // → 9007199254740995n

10n + 20n; // → 30n

10n - 20n; // → -10n

+10n; // → TypeError: Cannot convert a BigInt value to a number

-10n; // → -10n

10n * 20n; // → 200n

20n / 10n; // → 2n

23n % 10n; // → 3n

10n ** 3n; // → 1000n

const x = 10n;

++x; // → 11n

--x; // → 9n

console.log(typeof x); //"bigint"

10 + 10n; // → TypeError

Math.max(2n, 4n, 6n); // → TypeError

4)当 Boolean 类型与 BigInt 类型相遇时,BigInt的处理方式与Number类似,换句话说,只要不是

0n,BigInt就被视为true

js 复制代码
if(0n){//条件判断为false

}

if(3n){//条件为true

}

5)元素都为BigInt的数组可以进行sort。

6)BigInt可以正常地进行位运算,如|、&、<<、>>和

相关推荐
超哥--5 小时前
B站视频内容智能分析系统(九):React 前端与管理面板
前端·react.js·前端框架
Cutecat_8 小时前
视频字幕处理工具横向:提取模式 vs 编辑模式,该如何选择
android·前端·ios·语音识别
qq_422152578 小时前
PDF 加水印工具怎么选?2026 年文档版权保护方案对比
前端·pdf·github
kyriewen8 小时前
手写 Promise.all、race、any:不到 30 行代码,解决并发异步的所有姿势
前端·javascript·面试
brucelee1869 小时前
OpenClaw 浏览器控制(Chrome MCP)完整教程
前端·chrome
ct97810 小时前
React 状态管理方案深度对比
开发语言·前端·react
胡志辉的博客10 小时前
深入浅出理解浏览器事件循环:从一道输出题讲到 Chrome 源码
前端·javascript·chrome·chromium·event loop
代码不加糖10 小时前
js中不会冒泡的事件有哪些?
前端·javascript·vue.js
懂懂tty10 小时前
Vue2与Vue3之间API差异
前端·javascript·vue.js
AI焦点10 小时前
跨越协议鸿沟:Tool Use状态机从Anthropic到OpenAI兼容体系的适配要点
前端·人工智能