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

相关推荐
蜗牛攻城狮2 小时前
微前端四大方案选型对比与最佳实践:qiankun、micro-app、wujie、Module Federation
前端·微前端·qiankun·前端架构·micro-app·wujie
她说可以呀4 小时前
Vue插槽
前端·javascript·vue.js
qq_448011164 小时前
Vue + Jinja2两套模版与法冲突造成undefinedError
前端·javascript·vue.js
aixingpan4 小时前
aixingpan.cn API开发文档:前端查询夏令时和时区接口指南
前端·php
Yuzhiyuxia5 小时前
【AI Agent面试系列】AI Agent记忆机制知识点1
人工智能·面试·职场和发展
2601_958352905 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
志尊宝5 小时前
AI原生前端开发(039):AI辅助的Nuxt 4全栈开发
前端·vue.js·ai-native
FRing036 小时前
JavaScript入门到精通三十二(深拷贝、浅拷贝、递归函数)
开发语言·前端·javascript
excel6 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
外收内放6 小时前
Python基础语法练习题(73)
java·前端·python