ES6学习笔记7:数值的扩展

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^532^53之间(不含两个端点)

ES6引入:Number.MAX_SAFE_INTEGERNumber.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 入门》所做的笔记,大部分例子来源于此书。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值