ES6 数值的扩展
二进制和八进制表示法
二进制用前缀 0b
或 0B
表示、八进制数值用和 0o
或 0O
表示,如果要将 0b 和 0o 前缀的字符串数值转为十进制,要使用 Number 方法
Number('0b111') // 7
Number('0o10') // 8
Number.isFinite()、Number.isNaN()
它们与传统的全局方法 isFinite()
和 isNaN()
的区别在于,传统方法先调用 Number() 将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效.
Number.isFinite()
用来检查一个数值是否为有限的(finite),即不是 Infinity。参数类型不是数值,Number.isFinite一律返回falseNumber.isNaN()
用来检查一个值是否为NaN,参数类型不是 NaN,Number.isNaN 一律返回 false
Number.parseInt()、Number.parseFloat()
将全局方法 parseInt()
和 parseFloat()
,移植到 Number 对象上面,行为完全保持不变
Number.isInteger()
用来判断一个数值是否为整数。如果参数不是数值,Number.isInteger 返回 false
Number.EPSILON
代表极小的常量 Number.EPSILON,它表示 1 与大于 1 的最小浮点数之间的差。
Number.EPSILON 实际上是 JavaScript 能够表示的最小精度。误差如果小于这个值,就可以认为已经没有意义了,即不存在误差了。
Number.EPSILON 可以用来设置“能够接受的误差范围”。比如,误差范围设为 2 的-50 次方(即 Number.EPSILON * Math.pow(2, 2)),即如果两个浮点数的差小于这个值,我们就认为这两个浮点数相等。
安全整数和 Number.isSafeInteger()
JavaScript 能够准确表示的整数范围在-253到 253之间(不含两个端点),超过这个范围,无法精确表示这个值
Number.MAX_SAFE_INTEGER
和Number.MIN_SAFE_INTEGER
这两个常量,用来表示这个范围的上下限
Number.isSafeInteger()
则是用来判断一个整数是否落在这个范围之内
指数运算符(**)
这个运算符的一个特点是右结合,而不是常见的左结合。多个指数运算符连用时,是从最右边开始计算的
// 相当于 2 ** (3 ** 2)
2 ** 3 ** 2
// 512
指数运算符可以与等号结合,形成一个新的赋值运算符 (**=)
let a = 1.5;
a **= 2;
// 等同于 a = a * a;
let b = 4;
b **= 3;
// 等同于 b = b * b * b;
BigInt 数据类型
JavaScript 所有数字都保存成 64 位浮点数,这给数值的表示带来了两大限制。
一是数值的精度只能到 53 个二进制位(相当于 16 个十进制位),大于这个范围的整数,JavaScript 是无法精确表示的,这使得 JavaScript 不适合进行科学和金融方面的精确计算。
二是大于或等于 2 的 1024 次方的数值,JavaScript 无法表示,会返回 Infinity
BigInt
只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。 BigInt
类型的数据必须添加后缀 n
BigInt
同样可以使用各种进制表示,都要加上后缀 n:
0b1101n // 二进制
0o777n // 八进制
0xFFn // 十六进制
BigInt
与普通整数是两种值,它们之间并不相等typeof
运算符对于BigInt
类型的数据返回bigint
BigInt
可以使用负号(-),但是不能使用正号(+),因为会与 asm.js 冲突- JavaScript 原生提供
BigInt
对象,可以用作构造函数生成BigInt
类型的数值。转换规则基本与 Number() 一致,将其他类型的值转为BigInt
BigInt(123) // 123n
BigInt('123') // 123n
BigInt(false) // 0n
BigInt(true) // 1n
BigInt()
构造函数必须有参数,而且参数必须可以正常转为数值,下面的用法都会报错
new BigInt() // TypeError
BigInt(undefined) //TypeError
BigInt(null) // TypeError
BigInt('123n') // SyntaxError
BigInt('abc') // SyntaxError
// 参数如果是小数,也会报错。
BigInt(1.5) // RangeError
BigInt('1.5') // SyntaxError
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: ES6 函数的扩展
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论