JS 基本数据类型之 BigInt 的知识点
概念
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 一起使用:
+
*
-
**
%
- 除
>>>
(无符号右移)之外的 位操作 也可以支持。因为 BigInt 都是有符号的,>>>
(无符号右移)不能用于 BigInt。 - 为了兼容 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
Number
和 BigInt
可以进行比较。
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 的知识点相关推荐
- 前端(js/css/html)那些小的知识点,持续更新......
前端(js/css/html)那些小的知识点,持续更新...... 1.行内元素与块级元素有哪些及区别? 块级元素和行内元素的区别是,块级元素会占一行显示,而行内元素可以在一行并排显示.通过样式控制, ...
- js检测数据类型四种办法
typeof类型检测 作用:用于判断一个一个表达式,(对象或者原始值),返回一个字符串. var a; var b=null; var c=true; var d=1; var e='s'; var ...
- js基本数据类型及判断方法
js的基本数据类型? 七种,Number String Boolean Null Undefined Bigint symbol 如何判断js的数据类型 ? 引申提问:各自的优缺点和应用场景 1. 判 ...
- js判断数据类型常用的6种方法
js判断数据类型常用的方法,不论在开发中开始在面试中,都是经常遇到的问题,尤其是在面试时,当面试官问及js判断数据类型的方法时,回答的越多,说明掌握的广度跟深度越多,感觉自己逼格也越高.废话不多说了, ...
- js基础--数据类型检测的相关知识
欢迎访问我的个人博客:www.xiaolongwu.cn 前言 最近工作有点忙,好几天都没更新技术博客了. 周末起床打开有道云笔记,发现自己的博客todolist里躺了一堆只有名字的文件. 话不多说, ...
- js的数据类型--数字
近期做一些项目的时候发现,自己的js基础还是不够扎实,再看一遍犀牛书,加深自己的理解和印象.所以从这篇文章开始,后面都是关于原生js的一些内容. 这篇文章,我们具体介绍一下js的数据类型其中一种. j ...
- js的数据类型,以及如何判断它们是哪种类型
一.js的数据类型:null . nudefined .number.Boolean.string.array.object 二.判断js的数据类型 (1)值类型 console.log(typeof ...
- JS中数据类型、内置对象、包装类型对象、typeof关系
平时在复习JS基础知识时,经常会遇到JS数据类型.基础数据类型.内置对象.包装类型对象,检测数据类型时,用到的typeof值,感觉都差不多,但是又有差异.今天特地整理下,方便理解. JS数据类型 基础 ...
- js基本数据类型和复杂数据类型的区别
js基本数据类型和复杂数据类型的区别为: let b = {age: 10 }let a = b; a.age = 20; console.log(a); //{ age: 20 } //基本数据类型 ...
最新文章
- 怎样使phpnow1.5.6-1支持firebird
- 焦李成教授谈深度神经网络发展历程
- 全志linux led驱动程序,芯灵思Sinlinx A64 linux通过设备树写LED驱动(附参考代码,未测试)...
- 群晖nas怎么上传整个文件夹_你为什么需要一台NAS(第二期)
- java 注解 id_java注解
- enfp工具箱怎么用_隐喻:你的工具箱
- C语言100例01 PHP版(练习)
- php response响应,9. 响应 (Response)
- php mvc 通过 htaccess 隐藏 index.php 或 index.php?arg=
- dhtmlxTree 10分钟做一个树
- VB 二进制文件的操作
- 你应该关注的几个Eclipse超酷插件
- python---之round
- 找最长的字符串 (15 分)
- c语言if的判定条件,if条件判断语句,谁能帮我分析一下?
- 复数基2 DIT FFT程序
- 面试宝典(二)之经典面试题(含详细答案)
- Moebius for SQLServer负载均衡
- 砍掉3721 reg
- lae界面开发工具入门之介绍十--如何打包资源文件?