JavaScript是一种动态语言,当前最新版本为ES11。在这个版本中,BigInt成为了ES11中的新增特性之一。BigInt提供了一种新的数字类型,用于表示更大范围的数字,可以解决在JavaScript中浮点数运算中出现的精度丢失问题。本文将详细介绍ES11中的BigInt特性及其使用方式。
1. 什么是BigInt
BigInt是一种新的数字类型,可以用于表示任意精度的整数。BigInt值本身是不可变的。创建BigInt值的方式是在整数后面加上n:
const bigIntNum = 1234567890123456789012345678901234567890n; console.log(bigIntNum); // 1234567890123456789012345678901234567890n
2. BigInt的应用场景
JavaScript中普通的Number类型最大可以表示的整数是2的53次方,也就是Number.MAX_SAFE_INTEGER(9007199254740991)。如果超出这个范围,就会出现精度丢失的问题,例如:
const num1 = 9007199254740991n; const num2 = 9007199254740992n; console.log(num1); // 9007199254740991n console.log(num2); // 9007199254740992n console.log(num1 + 1n === num2); // true
从上面的示例中可以看到,在使用BigInt之后,不再需要担心在数字运算中出现精度丢失问题。同时,BigInt的范围也更加广泛,可以表示非常大的数字。
3. BigInt的运算
BigInt类型支持所有Number类型中的运算符,并且运算符的运算方法与Number相同。不同的是,可能需要注意运算符优先级的问题,尤其是当BigInt与Number类型一起进行运算时。
下面是一些BigInt运算的示例:
-- -------------------- ---- ------- ----- ---- - ------------------------ ----- ---- - ------------------------ ---------------- - ------ -- ----------------------- ---------------- - ------ -- ------------------------ ---------------- - ------ -- -------------------------------------- ---------------- - ---- -- ----------------------- ---------------- - ------ -- --- ---------------- -- ---- -- -------------------------------------------------------------------- ---------------- - --- -- ---------- ------ --- ------ --- ----- -----
4. 字符串与BigInt类型之间的转换
使用BigInt类型,我们可能会遇到将数字/字符串转换为BigInt类型的需求。
- Number类型转换为BigInt类型
使用构造函数即可完成类型的转换。在使用前,请注意判断是否超过了Number类型的最大范围。
const num = 9007199254740991; const bigInt = BigInt(num); console.log(bigInt); // 9007199254740991n
- 字符串转换为BigInt类型
使用BigInt构造函数并传入字符串即可完成类型的转换。
const str = "1234567890123456789012345678901234567890"; const bigInt = BigInt(str); console.log(bigInt); // 1234567890123456789012345678901234567890n
- BigInt类型转换为字符串
使用toString()方法即可完成类型的转换。
const bigInt = 1234567890123456789012345678901234567890n; const str = bigInt.toString(); console.log(str); // "1234567890123456789012345678901234567890"
5. BigInt与其他类型的运算
BigInt类型不支持与其他类型的运算,需要进行类型转换才可进行运算。
- BigInt类型与Number类型的运算
const num = 123; const bigInt = 1234567890123456789012345678901234567890n; console.log(num + Number(bigInt)); // 1.2345678901234568e+45 console.log(String(bigInt) + num); // 1234567890123456789012345678901234567890123
- BigInt类型与字符串的运算
const str = "123"; const bigInt = 1234567890123456789012345678901234567890n; console.log(str + String(bigInt)); // "1231234567890123456789012345678901234567890" console.log(`${bigInt} + ${str}`); // "1234567890123456789012345678901234567890 + 123"
6. 判断为BigInt类型
使用typeof判断BigInt类型会返回"bigint"。
const bigInt = 1234567890123456789012345678901234567890n; console.log(typeof bigInt === "bigint"); // true
7. 一些注意事项
BigInt类型不能使用Math对象中的方法,需要使用BigInt对象的静态方法。
BigInt类型不能与Symbol类型一起使用,组成对象属性键。
8. 总结
在ES11中,BigInt成为新的内置对象类型之一,用于表示任意大小的整数。BigInt类型具有广泛的应用场景,可以避免在JavaScript数字运算中出现的精度丢失问题。同时,BigInt类型也支持所有Number类型中的运算符,运算器也与Number对应。BigInt类型与其他类型之间的运算需要进行类型转换,同时需要注意避免产生一些错误。
参考文章
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a80ca248841e98944aae1d