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

相关推荐
山顶听风13 小时前
Flask应用改用Waitress运行
前端·笔记·python·flask
Tom Ma.13 小时前
使用腾讯云云开发(CloudBase)的云函数,删除云存储中指定目录下的过期文件
前端·javascript·腾讯云
Hilaku14 小时前
技术、业务、管理:一个30岁前端的十字路口
前端·javascript·面试
Knight_AL14 小时前
大文件分片上传:简单案例(前端切割与后端合并)
前端·状态模式
雨过天晴而后无语14 小时前
HTML纯JS添加删除行示例一
前端·javascript·html
IT_陈寒14 小时前
Vue3性能翻倍秘籍:5个被低估的Composition API技巧让你开发效率飙升🚀
前端·人工智能·后端
袁煦丞14 小时前
N1+iStoreOS+cpolarN1盒子变身2048服务器:cpolar内网穿透实验室第653个成功挑战
前端·程序员·远程工作
哀木14 小时前
聊聊 vue2 与 vue3 的 v-model
前端
前端小蜗14 小时前
🌐 利用Chrome内置 【AI翻译 API】实现国际化
前端·javascript·浏览器
寒月霜华14 小时前
JaveWeb后端-Web基础-SpringBoot Web、HTTP协议
前端·spring boot·http