文章目录
Number对象的扩展
二进制和八进制表示法
- 二进制
使用前缀0b
或者0B
表示
console.log(0b0010 === 2); // true
- 八进制
使用前缀0o
或者0O
表示
console.log(0o010===8)
如果要将二进制或者八进制的字符串转换成十进制,使用Number()
方法
console.log(Number('0b0110')); // 6
Number.isFinite() & Number.isNaN()
Number.isFinite()
可以检查一个数值是否是有限数值。即:不是Infinity
Number.isFinite(15); // true
Number.isFinite('15'); // true
注意:参数类型不是Number
,则Number.isFinite()
一律返回false
.
Number.isNaN()
可以检查一个值是否为NaN
.
Number.isNaN(25); // false
Number.isNaN(NaN); // true
Number.isNaN('25'); // false
注意:参数类型不是NaN
,则Number.isNaN()
一律返回false
.
Number.isFinite() & Number.isNaN() 与全局 isFinite() & isNaN() 的区别
全局isFinite()
& isNaN()
会先调用Number()
,将非数值的值转换成数值,然后再进行判断,而Number.isFinite()
&Number.isNaN()
只对数值有效
-
Number.isFinite()
对于非数值一律返回false
-
Number.isNaN()
对于非NaN
一律返回false
Number.parseInt() & Number.parseFloat()
在ES6中,将全局方法 parseInt()
和parseFloat()
转移到了Number
对象上。
Number.parseInt()
解析一个字符串,并返回一个整数
console.log(Number.parseInt('12.34')); // 12
Number.parseFloat()
解析一个字符串,并返回一个浮点型数
console.log(Number.parseFloat('12.34#')); // 12.34
这样转移的目的:减少全局性的方法,使得语言模块化。
Number.isInteger()
Number.isInteger()
可以判读一个数值是否是整数
console.log(Number.isInteger(12)); // true
console.log(Number.isInteger(12.0)); // true
console.log(Number.isInteger(12.34)); // false
注意:
- 由于JavaScript 采用IEEE754 标准,数值存储为64位双精度格式,数值激怒最多是53个二进制位(1个隐藏位和52个有效位)。当数值超过这个限度,第54位以后就会被丢弃,这个时候,
Number.isInteger()
就会出现误判。- 如果一个值的绝对值小于
Number.MIN_VALUE
(5E-324),即:小于JavaScript能够分辨的最小值,会被自动转换位0,这个时候,Number.isInteger()
就会出现误判。
Number.EPSILON
-
Number.EPSILON
表示1与大于1的最小浮点数之间的差, -
Number.EPSILON
实际上是JavaScript能够表示的最小精度。当误差小于这个值,就可以当作不存在误差处理。 -
Number.EPSILON设置能够接受的误差范围
,
例如:设置误差范围位:2的-50次方
Number.EPSILON * Math.pow(2,2)
- 误差检查函数
function withinErrorMargin(left,right){
return Math.abs(left - right) < Number.EPSILON * Math.pow(2,2);
}
console.log(0.1+0.2===0.3); // false;
console.log(withinErrorMargin(0.1+0.2===0.3)); // true;
安全整数和Number.isSafeInteger()
JavaScript 可以正确表示的整数范围:-2^53
到2^53
之间(不含两个端点)
ES6引入:Number.MAX_SAFE_INTEGER
和 Number.MIN_SAFE_INTEGER
这两个常量,用来表示这个范围。
Number.isSafeInteger()
可以判断一个整数是否在这个范围之内
注意:在运算过程中,验证运算结果是否是安全整数,不仅仅要判断计算后的结果,还要判断运算前的两个被运算的值是否是安全整数。
###指数运算符
ES2016中,新增了指数运算符(**
)
console.log(2 ** 2); // 4
console.log(2 ** 2 ** 3); // 256
上面第二个,是因为这个运算符是右结合,是从最右边开始计算的,所以:2 ** 2 ** 3
等同于 2** (2 ** 3 )
从而最后的结果是256
.
注意:这里的指数运算符和
Math.pow()
的实现不相同,对于特别大的运算结果,两个会有细微的差异
备注:本文是自己学习阮一峰老师的《ECMAScript 6 入门》所做的笔记,大部分例子来源于此书。