前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ES6之数值的扩展

ES6之数值的扩展

作者头像
wade
发布2020-04-23 17:08:06
4130
发布2020-04-23 17:08:06
举报
文章被收录于专栏:coding个人笔记

ES6对于数值的扩展大部分是方法,属性会比较少。

之前说过,严格模式八进制不能使用前缀0表示,ES6规定必须使用0o。ES6提供了二进制和八进制的新写法:

代码语言:javascript
复制
console.log(0b111110111 === 503); // true
console.log(0o767 === 503); // true
Number.isFinite(), Number.isNaN():
Number.isFinite()用来检查参数类似是否是数值,不是的都返回false:
console.log(Number.isFinite(15));// true
console.log(Number.isFinite(0.8));// true
console.log(Number.isFinite(NaN));// false
console.log(Number.isFinite('foo'));// false
console.log(Number.isFinite('15'));// false
console.log(Number.isFinite(true));// false
Number.isNaN()用来检查是否是NAN,不是的返回false:
console.log(Number.isNaN(15));// false
console.log(Number.isNaN(NaN));// true

需要注意的是,这两个方法和isFinite、isNaN不同在于,新增的两个方法不会进行Number转成数值:

代码语言:javascript
复制
console.log(isFinite(25)); // true
console.log(isFinite("25")); // true
console.log(Number.isFinite(25)); // true
console.log(Number.isFinite("25")); // false
console.log(isNaN(NaN)); // true
console.log(isNaN("NaN")); // true
console.log(Number.isNaN(NaN)); // true
console.log(Number.isNaN("NaN")); // false
Number.parseInt(), Number.parseFloat():

ES6把这两个方法移植到Number对象上面行为保持不变,主要是为了逐步减少全局属性window的方法,让JavaScript逐步模块化。

代码语言:javascript
复制
Number.isInteger():

判断是否为整数,因为JavaScript内部整数和浮点数采用同样的存储,.0会被视为整数,且参数不是数值的会返回false,还有,JavaScript采用的标准,限制了精确的限度,转成二进制位超过了53个二进制位,超过就会被丢弃,超过限制的会自动转成0:

代码语言:javascript
复制
Number.EPSILON:

之前就分享过,所有的程序计算都有一些误差的存在,比如:

代码语言:javascript
复制
console.log(0.1 + 0.2);//0.30000000000000004

EPSILOW就是用来设置误差能够接受的范围,解释起来就是1 与大于 1 的最小浮点数之间的差:

代码语言:javascript
复制
function err (l, r) { 
  return Math.abs(l - r) < Number.EPSILON * Math.pow(2, 2);
}
console.log(0.1 + 0.2 === 0.3); // false
console.log(err(0.1 + 0.2, 0.3)); // true
Number.isSafeInteger():

JavaScript能够准确表示的整数范围是-2^53到2^53之间(不含两个端点),超过就无法精确表示,ES6引入Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限。而这个方法就是用来判断是否落在这个范围内。

代码语言:javascript
复制
Math.trunc():

去除一个数的小数部分,返回整数部分,会先使用Number方法转成数值,而parseInt 函数将其第一个参数转换为字符串,解析它,并返回一个整数或NaN。如果不是NaN,返回的值将是作为指定基数(基数)中的数字的第一个参数的整数:

代码语言:javascript
复制
console.log(parseInt('13.14g'));//13
console.log(Math.trunc('13.14g'));//NaN
console.log(parseInt(6.022e23)); // 6
console.log(Math.trunc(6.022e23)); // 6.022e+23
console.log(parseInt(0.00000060));//6
console.log(Math.trunc(0.00000060));//0 
Math.sign():

用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。无法转为数值的值,会返回NaN:

整数返回+1

负数返回-1

0返回0

-0返回-0

无法转成数值的返回NaN

代码语言:javascript
复制
Math.cbrt()计算一个数的立方根,对于非数值也是先调用Number方法转成数值。无法转成数值的返回NaN。
Math.clz32()方法将参数转为 32 位无符号整数的形式,然后这个 32 位值里面有多少个前导 0。
Math.imul方法返回两个数以 32 位带符号整数形式相乘的结果,返回的也是一个 32 位的带符号整数。
Math.fround方法返回一个数的32位单精度浮点数形式。
Math.hypot方法返回所有参数的平方和的平方根。
Math.expm1(x)返回 ex - 1,即Math.exp(x) - 1。
Math.log1p(x)方法返回1 + x的自然对数,即Math.log(1 + x)。如果x小于-1,返回NaN。
Math.log10(x)返回以 10 为底的x的对数。如果x小于 0,则返回 NaN。
Math.log2(x)返回以 2 为底的x的对数。如果x小于 0,则返回 NaN。
Math.sinh(x) 返回x的双曲正弦(hyperbolic sine)
Math.cosh(x) 返回x的双曲余弦(hyperbolic cosine)
Math.tanh(x) 返回x的双曲正切(hyperbolic tangent)
Math.asinh(x) 返回x的反双曲正弦(inverse hyperbolic sine)
Math.acosh(x) 返回x的反双曲余弦(inverse hyperbolic cosine)
Math.atanh(x) 返回x的反双曲正切(inverse hyperbolic tangent)

这些方法我觉得在写是吧算法的时候去好好了解就好了,现在只要知道有这些东西就好了。

新增指数运算符**,需要注意的是是右结合,多个连用的时候,从右边开始计算:

代码语言:javascript
复制
console.log(2 ** 3 ** 2);//512

(完)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 coding个人笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档