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 分钟前
前端已死?什么是前端
开发语言·前端·javascript·vue.js·uni-app
谢尔登1 小时前
Vue 和 React 的异同点
前端·vue.js·react.js
祈澈菇凉5 小时前
Webpack的基本功能有哪些
前端·javascript·vue.js
小纯洁w6 小时前
Webpack 的 require.context 和 Vite 的 import.meta.glob 的详细介绍和使用
前端·webpack·node.js
想睡好6 小时前
css文本属性
前端·css
qianmoQ6 小时前
第三章:组件开发实战 - 第五节 - Tailwind CSS 响应式导航栏实现
前端·css
zhoupenghui1686 小时前
golang时间相关函数总结
服务器·前端·golang·time
White graces7 小时前
正则表达式效验邮箱格式, 手机号格式, 密码长度
前端·spring boot·spring·正则表达式·java-ee·maven·intellij-idea
庸俗今天不摸鱼7 小时前
Canvas进阶-4、边界检测(流光,鼠标拖尾)
开发语言·前端·javascript·计算机外设
菠菠萝宝7 小时前
【Java八股文】10-数据结构与算法面试篇
java·开发语言·面试·红黑树·跳表·排序·lru