es6(数值的扩展)

二进制和八进制表示法

  • 二进制表达法 0b/0B
  • 八进制表达法 0o/0O

以0b/0o为前缀的字符串,必须使用Number方法


Number.isFinite(), Number.isNaN()

返回值 :true/false
Number.isFinite():检验 数值 是否为有限数
Number.isNaN():检查 数值 是否为NaN

Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite('0.8'); // false

Number.isNaN(NaN) // true
Number.isNaN(15) // false
Number.isNaN('true' / 0) // true

Number.parseInt(), Number.parseFloat()

作用 :逐步减少全局性方法,使得语言逐步模块化
返回值 :数值
Number.parseInt() :获取数值的整数部分
Number.parseFloat() :获取数值的整数及小数部分

Number.parseInt === parseInt
Number.parseFloat === parseFloat

Number.isInteger()

作用 :判断一个 数值 是否为整数
返回值 :true/false
注意点

  1. 数值精度最多可以达到 53 个二进制位,若超过该限度,第54位及后面的位就会被丢弃
  2. 若数值的绝对值小于Number.MIN_VALUE(5E-324),则自动转为0
Number.isInteger(25) // true
Number.isInteger(25.1) // false
Number.isInteger(true) // false
Number.isInteger(3.0000000000000002) // true
Number.isInteger(5E-324) // false
Number.isInteger(5E-325) // true

Number.EPSILON

作用 :JavaScript 能够表示的最小精度。若误差小于该值,即不存在误差
表示 :能够接受的误差范围

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

安全整数和 Number.isSafeInteger()

es6引入了Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER两个常量来表示js能准确表示的范围
Number.isSafeInteger() :判断 整数 是否在该范围内
注意点 :验证运算结果是否落在安全整数的范围内,不要只验证运算结果,而要同时验证参与运算的每个值

function trusty (left, right, result) {
  if (
    Number.isSafeInteger(left) &&
    Number.isSafeInteger(right) &&
    Number.isSafeInteger(result)
  ) {
    return result;
  }
  throw new RangeError('Operation cannot be trusted!');
}

trusty(9007199254740993, 990, 9007199254740993 - 990)
// RangeError: Operation cannot be trusted!

trusty(1, 2, 3)
// 3

Math 对象的扩展

方法作用举例
Math.trunc()去除一个数的小数部分,返回整数部分Math.trunc(-4.9) // -4      Math.trunc(false) // 0
Math.sign()判断一个数到底是正数、负数、还是零Math.sign(true) // +1      Math.sign() // NaN
Math.cbrt()计算一个数的立方根Math.cbrt('hello') // NaN      Math.cbrt('8') // 2
Math.clz32()将参数转为 32 位无符号整数的形式,然后这个 32 位值里面有多少个前导 0左移运算符(<<)与Math.clz32方法直接相关
Math.imul()两个数以 32 位带符号整数形式相乘的结果
Math.fround()返回一个数的32位单精度浮点数形式
Math.hypot()返回所有参数的平方和的平方根
Math.expm1() e x − 1 e^{x}-1 ex1等同于Math.exp(x) - 1
Math.log1p()loge(x+1)等同于Math.log(1 + x)
Math.log10()log10(x+1)
Math.log2()log2(x+1)
Math.sinh(x)
Math.cosh(x)
Math.tanh(x)
Math.asinh(x)
Math.acosh(x)
Math.atanh(x)
**右结合,从最右边开始计算2 ** 3 ** 2 =2 ** (3 ** 2) =512;       b **= 3=b * b * b

Math.trunc()

Math.trunc()的作用

  • Math.trunc( )方法用于去除一个数的小数部分,返回整数部分。
  • 对于非数值,Math.trunc( )内部使用Number方法将其先转为数值。
  • 对于空值和无法截取整数的值,返回NaN。

对于不支持的环境可以一下代码模拟:

Math.trunc = Math.trunc || function(x) {
  return x < 0 ? Math.ceil(x) : Math.floor(x);
};

Math.trunc()Number.parseInt() 的区别

  • Math.trunc() :使用Number方法将其先转为数值,或直接对数值进行处理,理论上来说会快一些也更准确一些,但有些浏览器不支持
  • Number.parseInt() :先转换成字符串,再将字符串转换成整数

Math.sign()

Math.sign()的返回值

  • 参数为正数,返回+1;
  • 参数为负数,返回-1;
  • 参数为 0,返回0;
  • 参数为-0,返回-0;
  • 其他值,返回NaN。

Math.sign()的作用 :对于数值,直接判断,对于非数值,先转换为数值

对于不支持的环境可以一下代码模拟:

Math.sign = Math.sign || function(x) {
  x = +x; // convert to a number
  if (x === 0 || isNaN(x)) {
    return x;
  }
  return x > 0 ? 1 : -1;
};

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;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值