在 ES10 中,一个新的基本数据类型 BigInt 被引入。BigInt 表示一个任意精度的整数,新增了一种比 Number 类型更大的整数类型。本文将详细讲解 BigInt 类型的特征,以及如何在代码中使用 BigInt。
BigInt 的特性
BigInt 类型可以用任意大小的整数进行初始化,它不受 Number 类型 2^53 的限制。BigInt 类型支持所有 Number 类型支持的运算操作,如算术、比较和位运算。同时,BigInt 类型也支持一些新的运算操作,如 pow()
和 sqrt()
。
BigInt 类型的字面量与 Number 类型的字面量有些不同。在 BigInt 类型中,整数以 n
结尾来表示。例如,要表示一个值为 12345678901234567890
的 BigInt,可以使用以下示例代码:
const bigIntNumber = 12345678901234567890n;
在声明 BigInt 类型时,也可以使用 BigInt()
构造函数来创建一个 BigInt 类型。例如:
const bigIntNumber = BigInt("12345678901234567890123456789012345678901234567890");
BigInt 的使用
在使用 BigInt 类型时,需要注意某些行为与 Number 类型不同。例如,在进行运算时,BigInt 类型不支持与 Number 类型混用,这需要进行类型转换。例如,以下代码会出现类型错误:
const bigIntNumber = 12345678901234567890n; const number = 100; const result = bigIntNumber + number; // TypeError: Cannot mix BigInt and other types.
可以更改代码进行类型转换,使 BigInt 类型和 Number 类型运算不再出现类型错误。例如,以下代码是正确的:
const bigIntNumber = 12345678901234567890n; const number = 100; const result = bigIntNumber + BigInt(number);
在 BigInt 类型中,也可以使用 Math 对象的函数,但需要注意 Math 对象中涉及到的一些函数不支持 BigInt 类型。例如,以下 Math 函数不支持 BigInt 类型:
Math.abs(), Math.ceil(), Math.floor(), Math.round(), Math.sign(), Math.trunc()
使用 BigInt 类型时,应注意的另外一件事是使用和输出 BigInt 类型,需要使用字符串模板或者转型器进行操作。例如:
const bigIntNumber = 12345678901234567890n; console.log(`BigInt number: ${bigIntNumber}`); // BigInt number: 12345678901234567890 const stringified = bigIntNumber.toString(); console.log(typeof stringified, stringified); // string 12345678901234567890
结论
BigInt 类型是 ES10 新增的一种基本数据类型,可以处理大于 Number 类型最大值的数字。BigInt 类型使用若干与 Number 类型不同的语法、行为和限制,需要特别注意。在实际应用中,BigInt 类型的应用场景仍然相对有限,但它依然是对于开发者有学习价值的概念。
示例代码
声明 BigInt 类型
const bigIntNumber = 12345678901234567890n;
BigInt 类型加减数值
const bigIntNumber = 12345678901234567890n; const number = 100; const addResult = bigIntNumber + BigInt(number); const subResult = bigIntNumber - BigInt(number);
使用 BigInt() 构造函数创建 BigInt 类型
const bigIntNumber = BigInt("12345678901234567890123456789012345678901234567890");
使用 Math 对象进行 BigInt 运算
const bigIntNumber = 12345678901234567890n; const sqrtResult = Math.sqrt(Number(bigIntNumber));
BigInt 类型输出
const bigIntNumber = 12345678901234567890n; console.log(`BigInt number: ${bigIntNumber}`); // BigInt number: 12345678901234567890 const stringified = bigIntNumber.toString(); console.log(typeof stringified, stringified); // string 12345678901234567890
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/672f66ebeedcc8a97c8e4fac