#ECMAScript 2017 中的新数据类型 --BigInt 详解
在最新的ECMAScript 2017(ES8)中,新添加了一种数据类型BigInt, 可以在JavaScript中表示任意精度的整数,进一步扩展了JavaScript的能力。在本文中,我们将详细介绍BigInt的用法和指导意义。
BigInt是什么?
在JavaSctipt中,Number类型可以表示的整数范围是[-2^53, 2^53], 若超出此范围则会出现精度丢失或者数据溢出。BigInt则可以处理超出Number范围的整数。
BigInt类型的值是一个任意精度的整数,可以用任意长度的二进制补码表示。使用n后缀或者调用BigInt()函数创建BigInt。一般情况下,我们使用n后缀结尾的数字表示BigInt类型,例如:
const x = 123456789012345678901234567890n; const y = BigInt(9007199254740991); console.log(x); // 输出 123456789012345678901234567890n console.log(y); // 输出 9007199254740991n
注意,BigInt类型必须以n结尾, 否则会被解释为Number类型。
BigInt常见问题
如何进行运算
BigInt的运算方式与Number大致相同,包括四则运算,位运算等等。例如:
const a = 2n ** 1024n; console.log(a); // 输出 18889465931478580854784… const b = BigInt(123456789); console.log(a + b); // 输出 18889465931478580978273n console.log(a - b); // 输出 18889465931478580731265n console.log(a * b); // 输出 152078964231000773539730513063685505064263293304047013631097808986030380237822339638947185246909165119108450987758259354956806482521561603985520661071350836224812260856119464128n console.log(a / b); // 输出 1533268072794128098551636895496461146799n
同样也可以使用比较运算符,例如:
const a = 123456789012345678901234567890n; const b = BigInt('0x1fffffffffffff'); const c = BigInt('0x20000000000000'); console.log(a > b); // 输出 true console.log(a < c); // 输出 true
BigInt与Number混用
在BigInt与Number混用的情况下,会导致类型不匹配错误。因此需要进行类型转换,具体方式如下:
const a = 123456789012345678901234567890n; const b = Number.MAX_SAFE_INTEGER; const c = a + BigInt(b); console.log(c); // 输出 123456789012345679031469741331n
BigInt和字符串的互相转换
将BigInt转成字符串可以通过在数字后面添加toString()方法:
const a = 123456789012345678901234567890n; console.log(a.toString()); // 输出 123456789012345678901234567890 console.log(String(a)); // 输出 123456789012345678901234567890
将字符串转成BigInt可以使用BigInt()方法,注意BigInt支持十进制、十六进制和八进制三种字符串格式:
const a = '123456789012345678901234567890'; const b = '0x123456789abcdef0'; const c = '0o777'; console.log(BigInt(a)); // 输出 123456789012345678901234567890n console.log(BigInt(b)); // 输出 1311768467463790320n console.log(BigInt(c)); // 输出 511n
与此同时,需要注意BigInt类型不支持默认的数学运算和自增自减运算。因此如果需要操作BigInt类型,需要使用BigInt类型的运算方式。
BigInt未来展望
BigInt类型的出现,从一定程度上扩展了JavaScript的数据类型,使得这门语言越来越适合于大数据处理,特别是对于数字计算密集型应用场景。BigInt在未来或许会被用于加密领域,进一步提高数据隐私保护能力。
结论
BigInt 在ES8的提供增加了JavaScript处理大型数字长整形的能力。 BigInt的出现,进一步拓展了JavaScript的数据类型,使得这门语言越来越适合于大数据处理,特别是对于数字计算密集型应用场景。另外,与此同时,也需要开发者们在代码编写中注意BigInt类型和Number类型互换造成的问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67232a4c2e7021665e0eae71