专栏首页coding个人笔记ES6之数值的扩展

ES6之数值的扩展

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

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

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转成数值:

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逐步模块化。

Number.isInteger():

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

Number.EPSILON:

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

console.log(0.1 + 0.2);//0.30000000000000004

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

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这两个常量,用来表示这个范围的上下限。而这个方法就是用来判断是否落在这个范围内。

Math.trunc():

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

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

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)

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

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

console.log(2 ** 3 ** 2);//512

(完)

本文分享自微信公众号 - coding个人笔记(gh_2ce38b49dae1),作者:wade

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ES6之变量的解构赋值

    ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。解构赋值在一些场景下还是很有用的。

    wade
  • 重新认识vue中watch用法

    vue使用了真的很长时间了,但越是使用,越是去看api,就越发现,一直使用的api都仅仅是使用,而且使用的还不够到位。之前分享过计算属性computed和wat...

    wade
  • ES6之字符串扩展

    ES6对字符串扩展了一些功能,开发过程用到的不多,还有一些是Unicode的,这边就不仔细说那些,简单提一下ES6对字符串扩展了哪些。

    wade
  • 【爬虫】花瓣图片爬虫,Python图片采集下载源码

    花瓣是一个图片集合网站,也是设计师必备网站,不少设计师没有了花瓣的话,基本没有干活技能,哈哈,设计天下一大抄,其实花瓣的版权存在很大争议,不断被和谐,整改,就能...

    二爷
  • 搜索:文本的匹配算法

    alexqdjay
  • 基于 Swoole 的微信扫码登录

    随着微信的普及,扫码登录方式越来越被现在的应用所使用。它因为不用去记住密码,只要有微信号即可方便快捷登录。微信的开放平台原生就有支持扫码登录的功能,不过大部分人...

    企鹅号小编
  • SubSonic框架使用图解

    简介:SubSonic框架是一个优秀的、开源的ORM映射框架,同时提供符合自身需要的代码生成器。 官方下载地址:http://www.subsonic.org/...

    Java中文社群_老王
  • Redis5.x五种数据类型常见命令

    按照第一章 准备工作中的步骤,我们通过redis-cli命令进入redis命令行交互。

    用户1148394
  • redis缓存数据库

    用户1679793
  • Redis(2):常用命令详解

    redis命令不区分大小写 通用命令: 1. 获得符合规则的键名列表: keys pattern    其中pattern符合glob风格  ? (一个字符)...

    SecondWorld

扫码关注云+社区

领取腾讯云代金券