在ES5中,我们存在几个全局函数 isNaN函数,isFinite函数,parseInt函数,parseFloat函数等,对于这些全局函数的使用很简单,就拿isNaN函数来举例。

ES5中的写法是:

    isNaN(2.5);  //结果:false
window.isNaN(2.5);//结果:false

以上两种写法均可,isNaN是全局函数,本身就是属于window对象下的一个方法,所以大部分人会使用第一种写法。

但是在ES6的标准中,isNaN方法被移植到了Number对象上,也就是原本属于全局对象window下的函数,现在属于Number对象上了,同样被处理的函数还有isFinite函数,parseInt函数,parseFloat函数。

被移植后的函数使用方式是这样的:

    Number.isNaN(2.5); //结果:false

Number.isNaN函数:用于判断传入的是否是非数值,注意:是判断非数值,而不是判断数值,IsNaN的全称是: is not a number。

Number.isNaN(2.5); //结果:false

由于2.5是一个number类型的数值,所以返回false(再次注意:判断是非数值,所以是false,表示2.5是一个数值类型的值)。

那么,移植到Number对象isNaN函数和原本是全局函数的isNaN函数,有不一样的地方吗,还是仅仅简单地移植过来就完事了?

答案:有区别。

传统的isNaN函数会把非数值的参数转化成数值再进行判断,而Number. isNaN只对数值类型有效,非数值类型的参数一律返回false。看文字解释不过瘾,咱们看案例。

    isNaN('abc');//结果:true
//'abc'无法转为一个数值,返回true Number.isNaN('abc'); //结果:false
//'abc'是字符串,Number.isNaN不做类型转换,直接返回false

Number.isFinite函数:用来检查一个数值是否非无穷。注意是判断非无穷,不是判断无穷,这里跟isNaN函数一样,有点绕。

 Number.isFinite(1);
//结果:true,数值1是有穷,即非无穷 Number.isFinite(Infinity);
//结果:false,Infinity表示无穷大的特殊值

注意第二行代码的参数:Infinity,Infinity是window对象下的一个常量,表示一个无穷数。所以第二行代码会返回false。此外,isFinite函数跟isNaN函数一样,也只是对数值类型有效,对非数值类型的参数一律返回false。

Number.isFinite('abc'); //结果:false

所以同样要注意,当Number.isFinite函数返回false的时候,参数不一定就是一个有穷的数值类型,也有可能是一个非数值类型的参数。如:字符串’abc’。

parseInt函数:解析一个字符串,返回一个整数。parseInt函数同样是从window对象下移植到Number对象下,但是它的作用没有任何变化。

    //传统用法:
parseInt('12.3abc');
//结果:返回数值12 //ES6用法:
Number.parseInt('12.3abc');
//结果:返回数值12

parseFloat函数:解析一个字符串,并返回一个浮点数。跟parseInt一样,被移植到Number对象下,作用保持不变。

    //传统用法:
parseInt('12.3abc');
//结果:返回数值12 //ES6用法:
Number.parseInt('12.3abc');
//结果:返回数值12

Number.isInteger函数:用来判断是否是整数。

    Number.isInteger(3.2);
//结果:false Number.isInteger(3);
//结果:true

上面的运行结果也如我们所料,数值3.2不是整数,返回false。不过有一点要注意:在javascript内部对整数和浮点数采用一样的存储方式,因此小数点后如果都是0的浮点数,都会被认为是整数。看个例子就知道了:

    Number.isInteger(3.0);
//结果:true Number.isInteger(3.00);
//结果:true

Number.EPSILON常量:定义一个极小的数值。

  console.log(Number.EPSILON);
//结果:2.220446049250313e-16

Number.EPSILON的出现是用来判断浮点数的计算误差,如果浮点数计算得到的误差不超过Number.EPSILON的值,就表示可以接受这样的误差。

ES6为我们引入了安全整数的概念。什么?整数还有安全和不安全的说法?原来JavaScript能够准确表示的整数范围在-2^53到2^53之间,超过这个范围,无法精确表示这个值。故称之为不安全。

为此,ES6定义了两个常量来表示这个范围的最大值和最小值:Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER。此外,如果给你一个数值,你不知道它是否超出了这个安全范围,你可以使用ES6给我们新增的一个函数Number.isSafeInteger来进行判断。看例子:

    Number.isSafeInteger(Number.MAX_SAFE_INTEGER);
//结果:true Number.isSafeInteger(Number.MAX_SAFE_INTEGER+1);
//结果:false

我们用最大安全整数Number.MAX_SAFE_INTEGER来做试验,第一行代码的结果返回的值是true,也就表示Number.MAX_SAFE_INTEGER属于安全范围,第二行代码,我们对Number.MAX_SAFE_INTEGER进行了+1,相加后的数值超过安全范围,isSafeInteger函数就返回了false,表示不在安全范围内。

ES6给数值带来的扩展,除了对Number对象进行了扩展,还对Math对象进行了扩展。对于Math对象大家应该不会感到陌生,我们平时用的求随机数的方法random就是属于Math对象下的方法

    Math.random();
//结果:随机数0.8897368770341108

Math.trunc函数:用于去除一个数的小数部分,返回整数部分。

    Math.trunc(3);
//结果:3 Math.trunc(3.1);
//结果:3

Math.sign函数:用来判断一个数到底是正数、负数、还是零。

    Math.sign(3);
//结果:1 Math.sign(-3);
//结果:-1 Math.sign(0);
//结果:0 Math.sign('abc');
//结果:NaN

Math.cbrt函数:用于计算一个数的立方根。

    Math.cbrt(8);
//结果:2 Math.cbrt(27);
//结果:3

除了这三个函数以外,剩下的新增函数都是一些高中时期的数学方法,只不过是ES6将他们的运算封装成一个方法,方便大家使用,也算是开发者的福音。

它们分别是:

Math.acosh(x) 返回 x 的反双曲余弦。

Math.asinh(x) 返回 x 的反双曲正弦。

Math.atanh(x) 返回 x 的反双曲正切。

Math.clz32(x) 返回 x 的 32 位二进制整数表示形式的前导 0 的个数。

Math.sinh(x) 返回x的双曲正弦。

Math.cosh(x) 返回 x 的双曲余弦。

Math.expm1(x) 返回 eˆx - 1。

Math.fround(x) 返回 x 的单精度浮点数形式。

Math.hypot(...values) 返回所有参数的平方和的平方根。

Math.imul(x, y) 返回两个参数以 32 位整数形式相乘的结果。

Math.log1p(x) 返回 1 + x 的自然对数。

Math.log10(x) 返回以 10 为底的x的对数。

Math.log2(x) 返回以 2 为底的 x 的对数。

Math.tanh(x) 返回 x 的双曲正切。

这么多数学方法,估计很多人都会懵逼,根本记不住这么多,但是没关系,我们也不需要去死记硬背它们,我们只需要记住ES6为Math对象扩展了很多数学方法就可以了。等真正使用到的时候,我们再去查找资料就可以了。

总结:ES6对Number对象新增了isInteger函数、极小常量Number.EPSILON、安全整数;还将window对象下的4个函数移植到了Number对象下;此外,对Math对象扩展了17个新函数。

ES6 数值的扩展的更多相关文章

  1. es6 字符串的扩展和数值的扩展

    es6字符串的扩展 1. es6新增的一些方法 1.1 includes 判断是否包括在内,返回一个 true or false 1.2 statsWith 判断是否以什么开头,返回一个 true o ...

  2. ES6的新特性(5)——数值的扩展

    数值的扩展 二进制和八进制表示法 ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示. 0b111110111 === 503 // true 0o767 === ...

  3. ES6学习笔记(三)——数值的扩展

    看到这条条目录有没有感觉很枯燥,觉得自己的工作中还用不到它所以实在没有耐心看下去,我也是最近得闲,逼自己静下心来去学习去总结,只有在别人浮躁的时候你能静下心来去学去看去总结,你才能进步.毕竟作为前端不 ...

  4. ES6学习笔记(5)----数值的扩展

    参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 数值的扩展 1.Number对象的扩展(1)javascript的全局函数isNaN,isFin ...

  5. 五分钟了解ES6对数值的扩展

    文章目录 数值的扩展(ES6) 1. 二进制八进制表示法 2. Number对象 3. Math对象 4. 指数运算符 5. Integer 数据类型 5.1 简介 5.2 运算 数值的扩展(ES6) ...

  6. ES6中对数值的扩展

    上一节和大家学习了字符串的扩展,这一节轮到了数值,我们一起来学习数值的扩展. 剧透一下,这一节并不会很烧脑,都是介绍类的知识讲解,理解性的东西不多,初学者们也可以愉快地看完. 传统的写法 在介绍数值的 ...

  7. ES6学习(一):数值的扩展

    chapter06 数值的扩展 6.1 二进制和八进制 二进制 前缀 0b 或者 0B 八进制 前缀 0o 或者 0O 6.2 Number.isFinite() Number.isNaN() 原先这 ...

  8. 数组的复制及ES6数组的扩展

    一.数组的复制 // alert([1,2,3]==[1,2,3]); let cc = [0,1,2]; let dd = cc; alert(dd==cc);//此时改变dd会影响cc ES5 只 ...

  9. es6数组的扩展

    数组扩展运算符 ...(三个点) const demoArr=[0,1,2,3,4] console.log(...demoArr) // 0 1 2 3 4 // 他把一个数组用逗号分隔了出来 // ...

随机推荐

  1. CSS grid layout

      CSS网格布局用于将页面分割成数个主要区域,或者用来定义组件内部元素间大小.位置和图层之间的关系. 像表格一样,网格布局让我们能够按行或列来对齐元素. 但是,使用CSS网格可能还是比CSS表格更容 ...

  2. 微信小程序开发 [06] 一些补充的知识点

    0.写在前面的话 前几章的内容串联起来,基本上已经能写比较基础的小程序页面逻辑了,当然,wxml和wxss的我并没有写,因为前端我也并不擅长.这个章节,准备随便叨叨,然后补充一些之前没有提到的基础知识 ...

  3. 利用WebHook实现PHP自动部署Git代码

    平时项目代码都托管在Coding,然后每次提交了代码之后都要SSH到服务器上去git pull一次,很是繁琐,在看了OverTrue的<使用PHP脚本远程部署git项目>后就尝试在自己服务 ...

  4. 20155310 《网络攻防》Exp4 恶意代码分析

    20155310 <网络攻防>Exp4 恶意代码分析 基础问题 1.如果在工作中怀疑一台主机上有恶意代码,但只是猜想,所有想监控下系统一天天的到底在干些什么.请设计下你想监控的操作有哪些, ...

  5. Hadoop日记Day16---命令行运行MapReduce程序

    一.代码编写 1.1 单词统计 回顾我们以前单词统计的例子,如代码1.1所示. package counter; import java.net.URI; import org.apache.hado ...

  6. Android环境下使用call_usermodehelper()以及调试

    有时候设备驱动需要做一些与其他的设备通信的操作,但是驱动本身又不可以去实作,那这个时候就可以通过调用用户态的软件,通过这个软件和其他的设备进行通信. 那在内核态如何去调用用户态的程序呢?call_us ...

  7. servelt filter listener 的生命周期

    1. servlet    当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后 ...

  8. http-cache浏览器缓存

    摘至知乎 首先得明确 http 缓存的好处 减少了冗余的数据传输,减少网费 减少服务器端的压力 Web 缓存能够减少延迟与网络阻塞,进而减少显示某个资源所用的时间 加快客户端加载网页的速度 常见 ht ...

  9. 如何自出版一本书:定制 bookdown

    目录 如何自出版一本书:定制 bookdown bookdown 的第一步 亚马逊 Kindle 格式 创建书籍 _bookdown.yml 注意行宽 写在每个 .Rmd 文件的开头 index.Rm ...

  10. muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制

    目录 muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制 eventfd的使用 eventfd系统函数 使用示例 EventLoop对eventfd的封装 工作时序 runInLoo ...