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可以正常地进行位运算,如|、&、<<、>>和

相关推荐
uhakadotcom2 小时前
视频直播与视频点播:基础知识与应用场景
后端·面试·架构
范文杰2 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪3 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪3 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy3 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom4 小时前
快速开始使用 n8n
后端·面试·github
uhakadotcom4 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom4 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom4 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom4 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试