Syntax error翻译

Syntax error翻译

大家好,欢迎来到”进阶前端技术”,让我们一起关注前端前沿技术,深入探讨底层技术,共同进步。也欢迎大家关注、点赞、收藏和转发!

在 ES2020 之前,JavaScript 没有原生的大数计算方法,对于超过安全整数范围(Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER)的计算,通常需要依赖第三方库如 JI 和 bignumber.js 等来执行。为了解决这个问题,ES2020 引入了 BigInt 数据类型。那么接下来,我们将详细解读 BigInt 的相关知识。

一、什么是 BigInt?

BigInt 是一种数值数据类型,可用于表示传统的 Number 类型无法表示的小数和大数。每个 BigInt 值必须在数字后附加小写字母 n,例如 897n。实际上,严格来说 21 不等于 21n,前者是 Number 类型,后者是 BigInt 类型。

二、如何创建和使用 BigInt?

创建 BigInt 有两种方式:一种是将 n 附加到一个整数后面;另一种是对整个数值或仅包含整数值的字符串调用 BigInt() 构造函数。例如:

javascript

const sampleBigIntOne = 234n; // 方法一

const sampleBigIntTwo = BigInt(567); // 方法二,返回 567n

const sampleBigIntThree = BigInt(‘123’); // 方法二,返回 123n

const sampleBigIntFour = n; // 依然准确

要验证值是否为 BigInt 类型,可以使用常规的 typeof 运算符:

javascript

const sampleOne = 17n;

console.log(typeof sampleOne); // 输出: “bigint”

const sampleTwo = BigInt(789);

console.log(typeof sampleTwo); // 输出: “bigint” 但不推荐这么做,可能存在潜在问题

注意:在 BigInt 构造函数内传递数字是一种不好的做法,最好是只附加 n 或首先将其包装在字符串中。因为即使在转换发生之前数字也可能会丢度。例如:

javascript

const dontDoThis = BigInt(‘234567890’); // 正确做法

console.log(dontDoThis); // 期望输出: 正确的大数结果

const dontDoThisToo = BigInt(234567890); // 不推荐的做法,可能导致精度丢失或结果错误

console.log(dontDoThisToo); // 期望输出和实际输出可能会有出入

三、为什么需要 BigInt?

传统的 JavaScript 数字类型在表示非常大或非常小的数值时可能会存在精度问题。Number 的局限性在于其只能表示安全的整数范围内的数值,而对于超出此范围的数值计算则可能产生误差。而 BigInt 的引入解决了这个问题,它可以用于表示任意大小的整数并对其执行运算(不包括浮点数或小数)。这对于需要高精度计算的应用场景非常有用。比如金融计算、密码学和安全计算、游戏开发和分布式系统等。

四、BigInt 的特点和创新点

BigInt 保证不会遇到舍入误差问题,因为它不允许使用小数。执行以下操作会抛出语法错误:

javascript

const sample1 = 5.4n; // 直接抛出 SyntaxError 错误,因为 BigInt 不支持小数或浮点数表示法。 需要说明的是这里的小数表示的是包含小数点后的数字如“.”,并非指代普通的小数概念。普通的小数是可以使用BigInt表示的。例如:可以创建出类似这样的值 5.not a decimal number但是使用之前必须将字符串先转换为BigInt对象)!再次感谢网友的指正!感谢大家的支持!感谢指正!共同进步!再次强调一下!谢谢大家的指正和支持!共同进步!学习交流!共同进步!再次感谢大家的指正和支持!学习交流!学习交流群欢迎加入!一起学习交流共同进步!)希望建立一个互助交流的圈子大家可以相互分享自己的学习进度遇到的困难解决方法以及前端知识难点一起讨论解决大家互帮互助一起进步!!!!!!所以大数是可以被处理的只需以字符串形式传给BigInt函数即可(关于这一点进行了修正和补充感谢大家的指正和建议!)同时它还可以执行任意精度的计算这意味着在不丢失任何精度的情况下可以执行涉及非常大的数字的计算这在传统JavaScript数字类型中是做不到的因为它只能安全地表示特定范围内的整数当数字超出这个范围时执行计算可能会导致精度丢失而BigInt允许在不失去任何精度的情况下执行这些计算另外还允许为计算允许的位数设置边界这意味着可以为程序定义适当的整数范围通过BigInt原型上提供的asIntN和asUintN方法来实现这在某些情况下非常有用例如在游戏开发中需要进度时使用BigInt来确保这些值的准确表示金融计算分布式系统等领域也将受益于BigInt的高精度计算能力如果你是在进行网络编程分布式系统设计


Syntax error翻译