ES6 数值的拓展笔记
1.二进制和八进制表示法
ES6提供了二进制和八进制数值的新写法,分别用前缀0b(或0B) 和 0O(或oO)表示。
如果要将0b和0O的前缀字符串数值转为十进制,要使用Number方法。
2.Number.isFinite(),Number.isNaN()
Number.isFinite()用来检查一个数值是否为有限的,既不是Infinity。如果参数类型不是数值,一律返回false。
Number.isNaN() 用来检查一个值是否为NaN。
与传统的全局方法isFinite()和isNaN()区别在于:
传统方法先调用Number() 将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效
isFinite(25) // true
isFinite("25") // true
Number.isFinite(25) // true
Number.isFinite("25") // false
isNaN(NaN) // true
isNaN("NaN") // true
Number.isNaN(NaN) // true
Number.isNaN("NaN") // false
Number.isNaN(1) // false
3.Number.parseInt(),Number.parseFloat()
es6将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为保持不变。
4. Number.isInteger()
用来判断一个数值是否为整数。如果对于数据精度要求较高,不建议使用Number.isInteger()判断一个数值是否为整数。
5.Number.EPSILON
es6在Number对象上面,新增一个极小的常量Number.EPSILON。根据规格,它表示1与大于1的最小浮点数之间的差。
对于64为浮点数来说,大于1的最小浮点数相当于二进制的1.00..001,小数点后面连续51个零。这个值减去1之后,就等于2的-52次方。
Number.EPSILON
可以用来设置“能够接受的误差范围”。
6.安全整数和Number.isSafeInteger()
JavaScript 能够准确表示的整数范围在-2^53
到2^53
之间(不含两个端点),超过这个范围,无法精确表示这个值。
ES6 引入了Number.MAX_SAFE_INTEGER
和Number.MIN_SAFE_INTEGER
这两个常量,用来表示这个范围的上下限。
Number.isSafeInteger()
则是用来判断一个整数是否落在这个范围之内。
7.Math对象的扩展
Math.trunc() 方法用于去除一个数的小数部分,返回整数部分。对于非数值,Math.trunc内部使用Number方法将其转为数值。 对于空值和无法截取整数的值,返回NaN。
Math.sign() 方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先转为数值。它会返回5种值。参数为正数,返回+1;参数为负数,返回-1;参数为0,返回0;参数为-0,返回-0;其他值,NaN。
Math.cbrt() 方法用于计算一个数的立方根。对于非数值,该方法也是先用Number方法将其转为数值。
Math.clz32() 方法将参数转为32位无符号整数的形式,然后这个32位值里面有多个前导0。
clz32这个函数名来自“count leading zero bits in 32-bit binary repersentation of a number" (计算一个数的32位二进制形式的前导0的个数)的缩写。
左移运算符(<<)与Math.clz32方法直接相关。
Math.imul() 方法返回两个数以32位带符号整数形式相乘的结果,返回的也是一个32位的带符号整数。
Math.fround() 方法返回一个数的32位单精度浮点数形式。主要作用是将64位双精度浮点数转为32位单精度浮点数。如果小数的精度超过24个二进制位,返回值就会不同于原值,否则返回值不变(即与64位双精度值一致)。
Math.hypot() 方法返回所有参数的平方和的平方根。Math.hypot(3,4);3的平方加上4的平方,等于5的平方。
es6新增4个对数方法
(1)Math.expm1(x) 返回 ex - 1,即Math.exp(x)-1。
(2)Math.log1p(x) 返回1+x的自然对数,即Math.log(1+x)。如果x小于-1,返回Null。
(3)Math.log10(x) 返回以10为底的x的对数。如果x小于0,则返回NaN。
(4)Math.log2(x) 返回以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的反双曲正切
8.指数运算
es2016新增了一个指数运算符(**) ,这个运算符的一个特点是右结合。多个指数运算符连用时,是从最右边开始计算的。如2**2 // 4 2**3 //8 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;
注意,V8 引擎的指数运算符与Math.pow
的实现不相同,对于特别大的运算结果,两者会有细微的差异。
Math.pow(99, 99)
// 3.697296376497263e+197
99 ** 99
// 3.697296376497268e+197