概念

BigInt 是一种内置对象,它提供了一种方法来表示大于 253 - 1的整数。BigInt 可以表示任意大的整数。

为什么会出现 BigInt 数据类型

JavaScript中的基本数据类Number是双精度浮点数,它可以表示的最大安全范围是正负的2的53次方减一。对安全整数范围以外的整数(即从Number.MIN_SAFE_INTEGER到Number.MAX_SAFE_INTEGER)的任何计算可能会失去精度。出于这个原因,我们只能依靠安全范围内的数字整数值。

BigInt是JavaScript中的一个新的原始类型,可以用任意精度表示整数。使用BigInt,即使超出JavaScript Number 的安全整数限制,也可以安全地存储和操作大整数。

如何创建 BigInt ?

可以用在一个整数字面量后面加 n 的方式定义一个 BigInt ,如:120n,或者调用函数BigInt()。

const theBiggestInt = 9007199254740991n;
const alsoHuge = BigInt(9007199254740991);
console.log(theBiggestInt, alsoHuge);
// 9007199254740991n 9007199254740991n

类型

typeof 1n
// "bigint"
typeof BigInt('1')
// "bigint"

运算

以下操作符可以和 BigInt 一起使用:

  1. +
  2. *
  3. -
  4. **
  5. %
  6. >>> (无符号右移)之外的 位操作 也可以支持。因为 BigInt 都是有符号的, >>> (无符号右移)不能用于 BigInt。
  7. 为了兼容 asm.js ,BigInt 不支持单目 (+) 运算符。不支持一元加号(+)运算符的原因是某些程序可能依赖于+始终生成Number的不变量,或者抛出异常。 更改+的行为也会破坏asm.js代码。
+10n;
// VM123:1 Uncaught TypeError: Cannot convert a BigInt value to a number

与 BigInt 操作数一起使用时,算术运算符应该返回 BigInt 值。

除法(/)运算符的结果会自动向下舍入到最接近的整数。

比较

BigInt 和 Number 不是严格相等的,但是宽松相等的。

0n === 0
// false
0n == 0
// true

NumberBigInt 可以进行比较。

1n < 2
// true2n > 1
// true2 > 2
// false2n > 2
// false2n >= 2
// true

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

let arr = [3n, 5n, 7n, 1n, 2n, 3n];
console.log(arr.sort());

但如果数组当中存在非 BigInt 类型的数值时,会存在排序错误的情况。
比如:

let arr = [3n, 5n, 7n, 1n, 2n, 3n, 8];
console.log(arr.sort());

这时 sort 就会出现排序错误。

function sortIncludeArr(arr) {let left = [], right = [];arr.map(i => {if (typeof i === "bigint") {right.push(i)} else {left.push(i)}});return left.sort((a, b) => a - b).concat(right.sort())
}

兼容性不是很好

只有chrome67、firefox、Opera这些主流实现,要正式成为规范,其实还有很长的路要走。

总结

BigInt是一种新的数据类型,用于当整数值大于Number数据类型支持的范围时。这种数据类型允许我们安全地对大整数执行算术操作,表示高分辨率的时间戳,使用大整数id,等等,而不需要使用库。

重要的是要记住,不能使用Number和BigInt操作数的混合执行算术运算,需要通过显式转换其中的一种类型。 此外,出于兼容性原因,不允许在BigInt上使用一元加号(+)运算符。

参考文章:

JS最新基本数据类型:BigInt
BigInt MDN

JS 基本数据类型之 BigInt 的知识点相关推荐

  1. 前端(js/css/html)那些小的知识点,持续更新......

    前端(js/css/html)那些小的知识点,持续更新...... 1.行内元素与块级元素有哪些及区别? 块级元素和行内元素的区别是,块级元素会占一行显示,而行内元素可以在一行并排显示.通过样式控制, ...

  2. js检测数据类型四种办法

    typeof类型检测 作用:用于判断一个一个表达式,(对象或者原始值),返回一个字符串. var a; var b=null; var c=true; var d=1; var e='s'; var ...

  3. js基本数据类型及判断方法

    js的基本数据类型? 七种,Number String Boolean Null Undefined Bigint symbol 如何判断js的数据类型 ? 引申提问:各自的优缺点和应用场景 1. 判 ...

  4. js判断数据类型常用的6种方法

    js判断数据类型常用的方法,不论在开发中开始在面试中,都是经常遇到的问题,尤其是在面试时,当面试官问及js判断数据类型的方法时,回答的越多,说明掌握的广度跟深度越多,感觉自己逼格也越高.废话不多说了, ...

  5. js基础--数据类型检测的相关知识

    欢迎访问我的个人博客:www.xiaolongwu.cn 前言 最近工作有点忙,好几天都没更新技术博客了. 周末起床打开有道云笔记,发现自己的博客todolist里躺了一堆只有名字的文件. 话不多说, ...

  6. js的数据类型--数字

    近期做一些项目的时候发现,自己的js基础还是不够扎实,再看一遍犀牛书,加深自己的理解和印象.所以从这篇文章开始,后面都是关于原生js的一些内容. 这篇文章,我们具体介绍一下js的数据类型其中一种. j ...

  7. js的数据类型,以及如何判断它们是哪种类型

    一.js的数据类型:null . nudefined .number.Boolean.string.array.object 二.判断js的数据类型 (1)值类型 console.log(typeof ...

  8. JS中数据类型、内置对象、包装类型对象、typeof关系

    平时在复习JS基础知识时,经常会遇到JS数据类型.基础数据类型.内置对象.包装类型对象,检测数据类型时,用到的typeof值,感觉都差不多,但是又有差异.今天特地整理下,方便理解. JS数据类型 基础 ...

  9. js基本数据类型和复杂数据类型的区别

    js基本数据类型和复杂数据类型的区别为: let b = {age: 10 }let a = b; a.age = 20; console.log(a); //{ age: 20 } //基本数据类型 ...

最新文章

  1. 怎样使phpnow1.5.6-1支持firebird
  2. 焦李成教授谈深度神经网络发展历程
  3. 全志linux led驱动程序,芯灵思Sinlinx A64 linux通过设备树写LED驱动(附参考代码,未测试)...
  4. 群晖nas怎么上传整个文件夹_你为什么需要一台NAS(第二期)
  5. java 注解 id_java注解
  6. enfp工具箱怎么用_隐喻:你的工具箱
  7. C语言100例01 PHP版(练习)
  8. php response响应,9. 响应 (Response)
  9. php mvc 通过 htaccess 隐藏 index.php 或 index.php?arg=
  10. dhtmlxTree 10分钟做一个树
  11. VB 二进制文件的操作
  12. 你应该关注的几个Eclipse超酷插件
  13. python---之round
  14. 找最长的字符串 (15 分)
  15. c语言if的判定条件,if条件判断语句,谁能帮我分析一下?
  16. 复数基2 DIT FFT程序
  17. 面试宝典(二)之经典面试题(含详细答案)
  18. Moebius for SQLServer负载均衡
  19. 砍掉3721 reg
  20. lae界面开发工具入门之介绍十--如何打包资源文件?

热门文章

  1. Tomcat8性能JVM优化
  2. DMPR-PS论文详解
  3. ----顾问应该是探索新领域的向导,而不是拉雪橇的狗
  4. webpack手动配置以及自动配置
  5. (程序设计逻辑)如何按生日的年月日计算年龄(周岁)
  6. c语言 access编程,C语言中access/_access函数的使用实例详解
  7. MacOS开发-带有动画的窗口内容切换
  8. ESP32CAM实现手机app实时监控
  9. vscode html注释快捷键_史上最全vscode配置使用教程
  10. 课设毕设神器,8个经典抢答器优选电路设计方案合辑