在 JavaScript 中,数字的最大值为 2^53 - 1,如果要处理更大的数字,就需要使用 BigInt。BigInt 是 ECMAScript 2020 中引入的新特性,它可以处理任意精度的整数,包括超出 Number 范围的数字。
BigInt 的创建
BigInt 可以通过在数字后面加上 n
来创建,也可以使用 BigInt()
函数来创建。
const bigInt1 = 1234567890123456789012345678901234567890n; const bigInt2 = BigInt("1234567890123456789012345678901234567890");
BigInt 的运算
BigInt 可以进行基本的数学运算,包括加、减、乘、除和取模运算。
const bigInt1 = 1234567890123456789012345678901234567890n; const bigInt2 = BigInt("9876543210987654321098765432109876543210"); console.log(bigInt1 + bigInt2); // 11111111101111111100111111111101111111100n console.log(bigInt1 - bigInt2); // -8641975320864197532098765432108641975320n console.log(bigInt1 * bigInt2); // 12193263113702179536829138537342486496425763785368503172804628494746378900n console.log(bigInt1 / bigInt2); // 0n console.log(bigInt1 % bigInt2); // 1234567890123456789012345678901234567890n
需要注意的是,BigInt 和 Number 不能直接进行运算,需要先将 Number 转换成 BigInt。
const bigInt = 1234567890123456789012345678901234567890n; const number = 123; console.log(bigInt + BigInt(number)); // 1234567890123456789012345678901234568013n
BigInt 的比较
BigInt 可以和 Number、BigInt 进行比较,比较操作符包括 >、<、>=、<=、==、!=
。
const bigInt1 = 1234567890123456789012345678901234567890n; const bigInt2 = BigInt("9876543210987654321098765432109876543210"); const number = 123; console.log(bigInt1 > bigInt2); // false console.log(bigInt1 < bigInt2); // true console.log(bigInt1 == number); // false console.log(bigInt1 != number); // true
需要注意的是,对于相同类型的 BigInt,可以使用 ===、!==
进行比较,但是对于不同类型的 BigInt 和 Number,需要先将 Number 转换成 BigInt。
BigInt 的属性和方法
BigInt 有一些属性和方法,可以用来获取 BigInt 的一些信息和进行一些操作。
BigInt.asUintN()
BigInt.asUintN()
方法可以将 BigInt 转换成无符号整数,参数为转换后整数的位数。
const bigInt = 1234567890123456789012345678901234567890n; console.log(BigInt.asUintN(32, bigInt)); // 2684354566n console.log(BigInt.asUintN(64, bigInt)); // 1234567890123456789012345678901234567890n
BigInt.asIntN()
BigInt.asIntN()
方法可以将 BigInt 转换成有符号整数,参数为转换后整数的位数。
const bigInt = -1234567890123456789012345678901234567890n; console.log(BigInt.asIntN(32, bigInt)); // -1610612730n console.log(BigInt.asIntN(64, bigInt)); // -1234567890123456789012345678901234567890n
BigInt.prototype.toString()
BigInt.prototype.toString()
方法可以将 BigInt 转换成字符串,参数为转换后字符串的进制。
const bigInt = 1234567890123456789012345678901234567890n; console.log(bigInt.toString()); // "1234567890123456789012345678901234567890" console.log(bigInt.toString(2)); // "10001011101100101111011110011100001110110110001101101111101000010111011001100000101001101011011011110001100010000011011000111101011100011000100011101100010" console.log(bigInt.toString(16)); // "b3f7e3c38ed6f7a5d2456e0f8b1a4e"
总结
BigInt 是 ECMAScript 2020 中引入的新特性,可以处理任意精度的整数。需要注意的是,BigInt 和 Number 不能直接进行运算,需要先将 Number 转换成 BigInt。BigInt 有一些属性和方法,可以用来获取 BigInt 的一些信息和进行一些操作。在处理大数时,可以使用 BigInt 来避免精度丢失的问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6625d958c9431a720c228776