JavaScript基本类型之处理大数-BigInt

news/2024/7/11 0:43:42 标签: javascript, 开发语言, ecmascript, 前端, es6

JavaScript的基本类型为:

  • Boolean
  • Null
  • Undefined
  • Number
  • BigInt
  • String
  • Symbol
  • Object

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

BigInt数据类型出现的目的是为了支持比Number数据类型支持的范围更大的整数值。使整数溢出不再是问题。

由于JS存在数值限制,整数范围是[-2^53, 2^53],即[-9007199254740991,9007199254740991]在这个范围之外就是失真。

javascript">//以下代码均为网页控制台中直接写
Number.MAX_SAFE_INTEGER
9007199254740991
javascript">Number.isSafeInteger(9007199254740991)
true
javascript">Number.isSafeInteger(9007199254740993)
false

当超过Number的最大数值以后,不论之后的数值为多大,JS都会返回固定的最大值

javascript">const max = Number.MAX_SAFE_INTEGER;
max + 1
9007199254740992
const max = Number.MAX_SAFE_INTEGER;
max + 2
9007199254740992

我们会发现max+1和max+2的结果一样。只要我们在JavaScript中获得这个特定的值,就无法判断它是否准确。对安全整数范围以外的整数(即从Number.MIN_SAFE_INTERGER到Number.MAX_SAFE_INTERGER)的任何计算可能会失去精度。出于这个原因,我们只能依靠安全范围内的数字整数值。

BigInt

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

创建一个BigInt类型的方法,在数字后面添加n即可,例如1和1n,也可以使用BigInt()将Number转换为BigInt.

需要注意的是,BigInt是一个新的数据类型,所以它和Number是完全不一样的,即123 !== 123n

但是在Number的最大范围内,二者的取值可以被转换为同一个,也就是说 123 == 123n

逻辑值

对于BigInt的其他性质,和Number是几乎保持一致的,比如逻辑值强转:

if (0n) {
  console.log('if');
} else {
  console.log('else');
}
else
//0n与false的逻辑值相同,即0与false

运算符

BigInt的运算操作以及支持的运算符与Number一致,包括二元运算符:+、-、*、**、/、%,位运算:|,&,>>,<<

javascript">(7 + 6 - 5) * 4 ** 3 / 2 % 3;
// → 1
(7n + 6n - 5n) * 4n ** 3n / 2n % 3n;
// → 1n

但BigInt不支持一元运算符中的+号,但可以用-号表示一个负数

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

并且,BigInt不可以与Number进行混合运算,否则会直接抛出异常

javascript">1 + 1n
Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions at <anonymous>:1:3

对于需要处理大数问题,使用BigInt是一个非常安全的方法,有关JavaScript的相关数据类型和知识会继续和大家分享。有问题欢迎讨论~


http://www.niftyadmin.cn/n/1069938.html

相关文章

JavaScript面试考点-new操作符

JavaScript中new操作符是通过构造函数来创建一个实例对象。 而使用new的方式创建一个实例对象&#xff0c;经历了四个步骤&#xff1a; 创建一个空的对象将新对象的对象原型&#xff0c;指向构造函数的原型对象即__proto__ f.prototypethis指向返回对象 具体实习一个new的过…

GISer 应届生找工作历程(完结)

有半个月没更博客了&#xff0c;前几天在学校准备这保研&#xff0c;因为没有时间复习高数自然就没有过。 也没啥的&#xff0c;我本来就不打算复习&#xff0c;就是看看运气咋样&#xff08;哈哈&#xff09;。在昨天开始跑的招聘会&#xff0c;一天下来不同地方跑了三家挺…

前端制作篇之meta标签篇

移动端前端制作有些地方不同于互联网&#xff0c;这篇主要讨论的是meta标签。meta标签位于之间。是主要辅助HTML结构层的。meta标签不管在互联网前端还是在移动端都起了很重要的作用。这里只讨论移动端。附上代码进行说明&#xff1a;<!DOCTYPE html><!--HTML5 doctyp…

Vite2+TypeScript中设置全局路径@以及按需加载antdv

1.安装必要vite插件 yarn add vite-plugin-style-import -D or npm i vite-plugin-style-import -D 2.在vite.config.ts中进行配置 import { defineConfig } from "vite" import vue from "vitejs/plugin-vue" import cesium from "vite-plugin-c…

webstorm的各种快捷键配置

1.配置tpl (1)file—-setttings—-External Tools—增加一个tpl 参数如下: (1) Program: E:\ProgramFiles\nodejs\node_global\tpl.cmd (2) Parameters: $FileDir$\$FileNameWithoutExtension$.html $FileDir$\$FileNameWithoutExtension$.js (3) Woking directory: $FileDir$ …

JavaScript面试考点-==与===判断

最近在准备面试&#xff0c;复习过程中想起之前字节面试的一道非常有意思&#xff0c;并且知识点比较全面细节的一道题&#xff0c;面试官当时问的是 [] !([]) 应该返回什么&#xff0c;被问的有点傻&#xff0c;后面面试官提示了自己下面又看了以后理解&#xff0c;把这个有趣…

Vbs With File Attributes

最近没有在写vbs的代码&#xff0c;小试牛刀 Option ExplicitDim args, argSet args WScript.ArgumentsFor Each arg In argsChangeFileAttributes(arg) NextSub ChangeFileAttributes(file)Dim hfile, finalResult Dim fso Set fso WScript.CreateObject("Scripting.Fi…

handler 更新ui

处理程序 处理程序的使用&#xff08;主要更新UI&#xff09;。 更新 2010年3月9日&#xff0c; 由 平方厘米... gmail.com 处理程序使用留言 1&#xff0c;定义一个处理程序2&#xff0c;重写消息处理函数&#xff08;3&#xff09;发送消息//创建简单的Viewimport android…