ES6 数值扩展
数值扩展
二进制和八进制数的表示方法
ES6提供了二进制和八进制数值的写法。二进制必须用0b/0B
表示;八进制必须用0o/0O
表示。示例如下:
1 |
|
如果要将二进制/八进制数转换为十进制,需要使用Number
方法:
1 |
|
无穷数表示
ES6在原有Number的基础上新增了Number.isFinite()
和Number.isNaN()
两个方法。前者用于检查一个数值是否为有限数,后者检验一个数是否为NaN
。例子如下:
1 |
|
Number.parseInt()
和Number.parseFloat()
ES6将全局方法parseInt()
和parseFloat()
移植到Number对象上面,行为完全保持不变。
1 |
|
Number.isInteger()
和Number.EPSILON
Number.isInteger()
方法返回一个整型,因为JavaScript内部整数和浮点数使用的是同样的存储方法,因此3.0和3返回的都是整型3。
除此之外,ES6还新增了一个极小的常量Number.EPSILON
。引入这个量的目的是判断当前浮点数计算的结果是不是我们期望的。由于浮点数计算存在精度误差,因此如果这个误差能够小于Number.EPSILON
,我们就认为得到了正确结果。例子如下:
1 |
|
安全整数和Number.isSafeInteger()
JavaScript能够准确地表示的整数范围在 -2^53
至 2^53
之间(不包括两个端点),因此ES6中引入了Number.MAX_SAFE_INTEGER
和Number.MIN_SAFE_INTEGER
两个常量,用来表示这个范围的上下限。
1 |
|
所以在涉及大整型计算的过程中,需要同时校验运算数和运算结果是否为安全整型。例子如下:
1 |
|
Math对象的扩展
Math.trunc()
该方法用于去除一个数的小数部分,返回整数部分;对于非数值,会先将其转换为数值,再进行比较:
1 |
|
Math.sign()
该方法用来判断一个数到底为正数、负数还是零。
1 |
|
Math.cbrt()
该方法用于计算一个数的立方根
1 |
|
Math.clz32()
JavaScript的整数使用32位二进制形式表示,Math.clz32
方法返回一个数的32位无符号整数形式有多少个前导0。
1 |
|
Math.imul()
该方法返回两个数以32位带符号整数形式相乘的结果,返回的也是一个32位的带符号数。
1 |
|
Math.fround()
该方法返回一个数的单精度浮点数形式。对于整数来说该方法没有任何效果,但是对于无法使用64个二进制位精确表示的小数,该方法会返回最接近这个小数的单精度浮点数。
1 |
|
Math.hypot()
该方法返回所有参数的平方和的平方根。例如注明的勾股定理(勾三股四弦五)
1 |
|
对数方法
ES6新增了4个对数方法
- Math.expm1(x): 返回
e^x - 1
- Math.log1p(x): 返回
1 + x
的自然对数,如果x
小于-1, 返回NaN
; - Math.log10(): 返回以10为底的x的对数。如果
x
小于0,则返回NaN
; - Math.log2():返回以2为底的x的对数。如果
x
小于0,则返回NaN
;
三角函数方法
ES6新增了6个三角函数方法。
- Math.sinh(x):返回
x
的双曲正弦 - Math.cosh(x):返回
x
的双曲余弦 - Math.tanh(x):返回
x
的双曲正切 - Math.asinh(x):返回
x
的反双曲正弦 - Math.acosh(x):返回
x
的反双曲余弦 - Math.atanh(x):返回
x
的反双曲正切
指数运算
ES7新增了一个指数运算符**
,目前Babel转码已经支持。这里不再赘述。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!