文章目录

  • 背景
  • 一、BigInt是什么?
  • 二、使用方法
    • 1.创建
    • 2.类型判断
    • 3.算术运算
    • 4.逻辑运算
      • 条件判断
    • 5.不能使用 Math内置对象
  • 总结

背景

JS基本数据类型Number使用IEEE 754格式表示整数和浮点值(在某些语言中也叫双精度值)。它可以表示的最大安全范围是[-2^53-1, 2^53-1],超出这个范围就是失真。

     console.log(Number.MAX_SAFE_INTEGER); //9007199254740991console.log(Number.MAX_SAFE_INTEGER + 1); //9007199254740992console.log(Number.MAX_SAFE_INTEGER + 2); //9007199254740992console.log(Number.MAX_SAFE_INTEGER + 3); //9007199254740994console.log(Number.MAX_SAFE_INTEGER + 4); //9007199254740996console.log(Number.MAX_SAFE_INTEGER + 5); //9007199254740996

为此JavaScript于2019.7.22正式公布BigInt,并成为第八个基本数据类型。


一、BigInt是什么?

BigInt 是一种内置对象,它提供了一种方法来表示超出 [-2^53-1, 2^53-1]范围的整数。BigInt 可以用任意精度表示整数。

二、使用方法

1.创建

法一:在一个整数字面量后面加 n 的方式定义一个 BigInt ,如:10n;
法二:调用函数 BigInt()(但不包含 new 运算符)并传递一个整数值或字符 串值。

const theBiggestInt = 9007199254740991n;const alsoHuge = BigInt(9007199254740991);
// ↪ 9007199254740991nconst hugeString = BigInt("9007199254740991");
// ↪ 9007199254740991nconst hugeHex = BigInt("0x1fffffffffffff");
// ↪ 9007199254740991nconst hugeBin = BigInt("0b11111111111111111111111111111111111111111111111111111");
// ↪ 9007199254740991n

2.类型判断

console.log(typeof 1n);//bigint
typeof 1n === 'bigint'; // true
typeof BigInt('1') === 'bigint'; // true

使用 Object 包装后, BigInt 被认为是一个普通 “object” :

typeof Object(1n) === 'object'; // true

3.算术运算

BigInt的运算操作以及支持的运算符与Number一致,包括二元运算符:+、-、*、**、/、%,位运算:|,&,>>,<<;
但是 >>> (无符号右移)不能用于 BigInt。

const previousMaxSafe = BigInt(Number.MAX_SAFE_INTEGER);
// ↪ 9007199254740991nconst maxPlusOne = previousMaxSafe + 1n;
// ↪ 9007199254740992nconst theFuture = previousMaxSafe + 2n;
// ↪ 9007199254740993n, this works now!const multi = previousMaxSafe * 2n;
// ↪ 18014398509481982nconst subtr = multi – 10n;
// ↪ 18014398509481972nconst mod = multi % 10n;
// ↪ 2nconst bigN = 2n ** 54n;
// ↪ 18014398509481984nbigN * -1n
// ↪ –18014398509481984n

为了兼容 asm.js,BigInt 不支持单目 (+) 运算符,支持单目 (-) 运算符。

+1n
Uncaught TypeError: Cannot convert a BigInt value to a number at <anonymous>:1:1
-1n
-1n

‘/’ 操作符对于整数的运算也没问题。可是因为这些变量是 BigInt 而不是 BigDecimal ,该操作符结果会向零取整,也就是说不会返回小数部分。

const expected = 4n / 2n;
// ↪ 2nconst rounded = 5n / 2n;
// ↪ 2n, not 2.5n

不能和任何 Number 实例混合运算,两者必须转换成同一种类型。在两种类型来回转换时要小心,因为 BigInt 变量在转换成 Number 变量时可能会丢失精度。

console.log(1 + 1n);
//Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions at <anonymous>:1:3
console.log(1 + Number(1n)); //2

4.逻辑运算

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

0n === 0
// ↪ false0n == 0
// ↪ true

Number 和 BigInt 可以进行比较。

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

两者也可以混在一个数组内并排序。

const mixed = [4n, 6, -12n, 10, 4, 0, 0n];
// ↪  [4n, 6, -12n, 10, 4, 0, 0n]mixed.sort();
// ↪ [-12n, 0, 0n, 10, 4n, 4, 6]

注意被 Object 包装的 BigInt 使用 object 的比较规则进行比较,只用同一个对象在比较时才会相等。

0n === Object(0n); // false
Object(0n) === Object(0n); // falseconst o = Object(0n);
o === o // true

条件判断

BigInt 在需要转换成 Boolean 的时表现跟 Number 类似:

  1. 如通过 Boolean 函数转换;
Boolean(0n)
// ↪ falseBoolean(12n)
// ↪ true
  1. 用于 Logical Operators (en-US) ||, &&, 和 ! 的操作数;
0n || 12n
// ↪ 12n0n && 12n
// ↪ 0n
!12n
// ↪ false!0n
// ↪ true
  1. 用于在像 if statement 这样的条件语句中。
if (0n) {console.log('Hello from the if!');
} else {console.log('Hello from the else!');
}// ↪ "Hello from the else!"

5.不能使用 Math内置对象

let res = Math.max(2n, 4n);
console.log(res);
//Uncaught TypeError: can't convert BigInt to number

总结

BigInt是对Number整数部分的拓展。
与Number使用方面的区别:

  • 创建方式
  • 算术运算方面:‘\’向下取整,不支持单目 (+) 运算符,不能与Number类型混用
  • 不能使用Math内置对象

参考:MDN

JS新增基本数据类型--BigInt相关推荐

  1. JS基本数据类型 —— BigInt

    今天想起了js新增的基本数据类型,就去上网查阅了一番,在此做个总结. 首先我们要了解它是干什么的,BigInt数据类型的目的是比Number数据类型支持的范围更大的整数值以任意精度表示整数的能力尤为重 ...

  2. 数值的扩展方法以及新增数据类型BigInt

    二进制和八进制表示法 ES6提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o或(0O)表示 0b111110111 === 503 // true; 0o767 === 503; / ...

  3. js ES2020定义了 BigInt 构造函数

    目录 一.BigInt 数据类型 1.BigInt 数据类型的用处 2.BigInt 数据类型的特性 二.BigInt 对象(实例) 1.创建一个 BigInt 对象 2.BigInt 实例的方法 ( ...

  4. 前端开发:JS中常用数据类型的转换以及使用场景集锦

    前言 在前端开发中,关于数据转换也是使用频率非常高的知识点,尤其是常见数据类型之间的相互转换的使用频率就更高了,那么本篇博文就来分享一下关于JS中常用数据类型的转换使用,分享一下,方便后期查阅使用. ...

  5. 【校招VIP】前端JS语言之数据类型

    考点介绍: JavaScript 中常见数据类型有Number.String.Boolean.Object.Array.Json.Function.Date.RegExp.Error.undefine ...

  6. H5面试题---介绍js的基本数据类型

    js的基本数据类型 Undefined.Null.Boolean.Number.String 转载于:https://www.cnblogs.com/songchunmin/p/7789582.htm ...

  7. 判断js中的数据类型的方法

    在 判断js中的数据类型 我们通常会使用typeOf()方法,        typeof   2         输出   number       typeof   null       输出   ...

  8. [转载]如何判断js中的数据类型

    原文地址:如何判断js中的数据类型作者:最初的你 如何判断js中的数据类型:typeof.instanceof. constructor. prototype方法比较 如何判断js中的类型呢,先举几个 ...

  9. JS有哪些数据类型?

    JS有哪些数据类型? 基本数据类型:字符串(string).数值(number).布尔(boolean) 复合数据类型:数组(array).对象(object) 特殊数据类型:空(null).未定义( ...

最新文章

  1. JetBrains产品永久破解
  2. [How TO]-ubuntu下快速搭建http
  3. android触摸外部关闭键盘,如何隐藏Android上的软键盘,点击外部EditText?
  4. 成都软件工程师python_为什么每个软件工程师都应该学习Python?
  5. 华为超大云数据中心落地贵州,这些硬核技术有利支撑“东数西算”
  6. DedeCMS 批量删除垃圾注册用户和垃圾文档
  7. ★LeetCode(538)——把二叉搜索树转换为累加树(JavaScript)
  8. HDFS某个节点的磁盘满了
  9. 抽象类应用模板方法模式和接口应用之策略设计模式
  10. 新益华基层医疗系统使用方法_「热缩带」管道防腐新方向,聚乙烯热缩带安装使用方法...
  11. 网络延迟及故障分析与排查实战
  12. 树莓派做旁路网关 及 无法上网解决
  13. 携程实习生春招面经-后台开发
  14. 基于阻抗控制的工业机器人轨迹跟踪系统 Simulink/Simscape 仿真
  15. 在vue项目中使用高德地图
  16. 微信小程序输入框字数限制以及计算
  17. opencv 处理黑夜_Python基于OpenCV的固定位置半透明水印去除两种方案
  18. 动态分区分配及可重定位分区分配
  19. 弹性云服务器使用须知
  20. 穿越寒冬春暖花开,当下便是在社科院杜兰金融管理硕士项目读研的好时光

热门文章

  1. 程序员接私活的6个网站,你有技术就有钱!
  2. 爬虫技术(01)神箭手爬虫初学案例解读
  3. JetBrains .idea项目目录泄露
  4. 第七届蓝桥杯大赛个人赛--小明被绑架到X星球的巫师W那里
  5. 国际结算银行:嵌入式监管可大幅简化合规监管
  6. poscms统计数据调用
  7. 计算机视觉研究院手把手教你深度学习的部署(手势识别,源码已开源)
  8. DVE 查看覆盖率方法
  9. pandas dataframe query()
  10. 《有限元分析基础教程》(曾攀)笔记一-二维杆单元有限元程序(基于Python)...