ES11 引入了一个新的数据类型 BigInt,用于表示大数。在 JavaScript 中,数字的大小最多可以表示到 2^53-1,而 BigInt 可以表示更大的数字,也就是超出了 Number 表示范围的数字。
BigInt 类型的基本使用
BigInt 类型可以通过在数字后加一个 n 的方式创建,例如:
const a = 123456789012345678901234567890n; const b = BigInt('123456789012345678901234567890');
可以通过 typeof 运算符来检查一个变量是否是 BigInt 类型:
typeof a; // 'bigint'
BigInt 类型的运算
BigInt 类型可以进行大部分的运算操作,与普通数字类型的操作是一样的。例如加、减、乘、除、求余等运算符,和比较运算符相同。需要注意的是,不能使用相等运算符 ==
比较 BigInt 和 Number 或者 BigInt 和 String 类型的值是否相等,需要使用 ===
运算符或者 BigInt 自身的 equals()
方法。
const a = 123456789012345678901234567890n; const b = 987654321098765432109876543210n; console.log(a + b); // 1111111110111111111111111111111n console.log(a * b); // 12193263113702179591633011176496522791410698473034575102561039103155437794200n console.log(a < b); // false console.log(a === 123456789012345678901234567890n); // true console.log(a.equals(123456789012345678901234567890n)); // true
数字对象的使用
在 ES6 中,JavaScript 提供了数字对象 Number,用于处理一些数字相关的计算和操作。例如 Math 对象中的一些方法就是用于处理数字的。ES11 中又引入了一些新的 数字对象方法,下面我们来看一下这些方法的使用。
Number.parseInt() 和 Number.parseFloat()
这两个方法和全局的 parseInt() 和 parseFloat() 方法是一样的,都是用于将一个字符串解析成整数或者浮点数。不同的是,全局方法是挂载在 window 或者 global 对象下的,而这两个方法是挂载在 Number 对象下的。
console.log(Number.parseInt('123')); // 123 console.log(Number.parseFloat('123.45')); // 123.45
Number.isFinite()
这个方法用于判断一个值是否是有限数,如果是则返回 true,否则返回 false。注意,Infinity、-Infinity、NaN 不是有限数,返回 false。
console.log(Number.isFinite(123)); // true console.log(Number.isFinite(Infinity)); // false console.log(Number.isFinite(NaN)); // false
Number.isInteger()
这个方法用于判断一个值是否为整数,如果是,则返回 true,否则返回 false。
console.log(Number.isInteger(123)); // true console.log(Number.isInteger(123.45)); // false
Number.MAX_SAFE_INTEGER 和 Number.MIN_SAFE_INTEGER
JavaScript 中安全的整数范围是 -2^53 到 2^53-1,超过这个范围,计算会出现精度误差。Number 对象提供了两个常量来表示这个范围的最大值和最小值。
console.log(Number.MAX_SAFE_INTEGER); // 9007199254740991 console.log(Number.MIN_SAFE_INTEGER); // -9007199254740991
总结
ES11 中引入的 BigInt 类型和 Number 对象方法,为处理数字类型的计算和运算提供了方便的方法。在实际编写代码的过程中,要注意使用合适的类型和方法,以保证运算的正确性和精度。
示例代码
-- -------------------- ---- ------- ----- - - -------------------------------- ----- - - ----------------------------------------- ------------- - --- -- -------------------------------- ------------- - --- -- ------------------------------------------------------------------------------ ------------- - --- -- ----- ------------- --- --------------------------------- -- ---- ------------------------------------------------------- -- ---- ------------------------------------ -- --- ----------------------------------------- -- ------ ---------------------------------- -- ---- --------------------------------------- -- ----- ---------------------------------- -- ----- ----------------------------------- -- ---- -------------------------------------- -- ----- ------------------------------------- -- ---------------- ------------------------------------- -- -----------------
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646c6846968c7c53b0b63177