为使js语言更加模块化,es6将很多全局的东西移植到了相应的模块内
例如将全局方法parseInt()和parseFloat(),移植到Number对象上面,行为完全保持不变。
这两个方法很简单,就不作说明了。
Number.isFinite(), Number.isNaN() :
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
它们与传统的全局方法isFinite()和isNaN()的区别在于,传统方法先调用Number()将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效
关于js的数值精度:
JavaScript 采用 IEEE 754 标准,数值存储为64位双精度格式,数值精度最多可以达到 53 个二进制位(1 个隐藏位与 52 个有效位)。如果数值的精度超过这个限度,第54位及后面的位就会被丢弃
即js能表示的最大的值就是2的53次方,他的负数便是最小值
Number.EPSILON :
es6新增的,JavaScript 能够表示的最小精度,值为2的负52次方
由于js的浮点数运算并不精确:
0.1 + 0.2
// 0.30000000000000004
0.1 + 0.2 === 0.3 // false
Number.EPSILON可以用来设置能够接受的误差范围
function withinErrorMargin (left, right) {
return Math.abs(left - right) < Number.EPSILON * Math.pow(2, 2);
}
0.1 + 0.2 === 0.3 // false
withinErrorMargin(0.1 + 0.2, 0.3) // true
安全整数:
ES6 引入了Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量,用来表示js数值的上下限。
Number.isSafeInteger()则是用来判断一个整数是否落在这个范围之内
Math对象的扩展:
Math.trunc()
方法用于去除一个数的小数部分,返回整数部分。
对于非数值,Math.trunc内部使用Number方法将其先转为数值。例如布尔值。
对于空值和无法截取整数的值,返回NaN。
Math.sign()
方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。
参数为正数,返回+1;
参数为负数,返回-1;
参数为 0,返回0;
参数为-0,返回-0;
其他值,返回NaN。