本文共--字 阅读约--分钟 | 浏览: -- Last Updated: 2020-06-15
ES6
在Number
对象上,新提供了Number.isFinite()
和Number.isNaN()
两个方法。
Number.isFinite()
用来检查一个数值是否为有限的(finit
e),即不是Infinity
。
Number.isNaN()
用来检查一个值是否为NaN
。
它们与传统的全局方法isFinite()
和isNaN()
的区别在于,传统方法先调用Number()
将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效,Number.isFinite()
对于非数值一律返回false
,Number.isNaN()
只有对于NaN
才返回true
,非NaN
一律返回false
。
ES6
将全局方法parseInt()
和parseFloat()
,移植到Number
对象上面,行为完全保持不变。这样做的目的,是逐步减少全局性方法,使得语言逐步模块化。
Number.isInteger()
用来判断一个数值是否为整数。JavaScript
内部,整数和浮点数采用的是同样的储存方法,所以 3
和 3.0
被视为同一个值。
JavaScript
能够准确表示的整数范围在-2^53
到2^53
之间(不含两个端点),超过这个范围,无法精确表示这个值。ES6
引入了Number.MAX_SAFE_INTEGER
和Number.MIN_SAFE_INTEGER
这两个常量,用来表示这个范围的上下限。Number.isSafeInteger()
则是用来判断一个整数是否落在这个范围之内。
Math.pow(2, 53) // 9007199254740992
9007199254740992 // 9007199254740992
9007199254740993 // 9007199254740992
Math.pow(2, 53) === Math.pow(2, 53) + 1 // true
Number.isSafeInteger(9007199254740993) // false
Number.isSafeInteger(990) // true
Number.isSafeInteger(9007199254740993 - 990) // true
9007199254740993 - 990 // 9007199254740002
// 正确答案应该是 9007199254740003
// 9007199254740993 被当做 9007199254740992计算
Math.trunc
方法用于去除一个数的小数部分,返回整数部分。对于非数值,Math.trunc
内部使用Number
方法将其先转为数值。对于空值和无法截取整数的值,返回NaN
Math.sign
方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。
它会返回五种值。
参数为正数,返回+1
;
参数为负数,返回-1
;
参数为0
,返回0
;
参数为-0
,返回-0
;
其他值,返回NaN
。
Math.cbrt
方法用于计算一个数的立方根。对于非数值,Math.cbrt
方法内部也是先使用Number
方法将其转为数值。
// 对于没有部署这个方法的环境,可以用下面的代码模拟。
Math.cbrt = Math.cbrt || function(x) {
var y = Math.pow(Math.abs(x), 1/3);
return x < 0 ? -y : y;
};
Math.hypo
t方法返回所有参数的平方和的平方根。如果参数不是数值,Math.hypot
方法会将其转为数值。只要有一个参数无法转为数值,就会返回 NaN
。
Math.hypot(3, 4); // 5
ES2016
新增了一个指数运算符(**
)。
2 ** 2 // 4
2 ** 3 // 8
// 这个运算符的一个特点是右结合,而不是常见的左结合。
// 多个指数运算符连用时,是从最右边开始计算的。
2 ** 3 ** 2 // 512 2的9次方