数值的扩展(ES6)

1. 二进制八进制表示法

ES6提供了二进制和八进制数值的新写法,分别用前缀 0b(或0B)0o(或0O) 表示。

如果要将使用 0b0x 的数字转换为十进制,要使用Number方法。

Number('0b111'); // 7
Number('0o10'); // 8

2. Number对象

方法,常量(ES6新增) 用法
Number.isFinite() 检查一个数值是否是有限的,是返回true否则返回false 区别: isFinite()的参数如果不是数值会先调用Number方法将其转换为数值,Number.isFinite() 只对数值有限非数值一律返回false
Number.isNaN() 检查一个值是否是NaN 区别: isNaN()的参数如果不是数值会先调用Number方法将其转换为数值,Number.isNaN() 只对数值有限非数值一律返回false
Number.parseInt() 转换为整数,以前是全局方法,现在移植到Number对象上,有利于模块化
Number.parseFloat() 转换为浮点数,以前是全局方法,现在移植到Number对象上,有利于模块化
Number.isInteger() 判断一个值是否为整数,在JS中整数和浮点数是同样的储存方法,所以3和3.0被视为一个值,这一点和c等语言是不同的
Number.EPSILON 极小的常量, Number.EPSILON // 2,220446049250313e-16 作用:为浮点数设置一个误差范围,我们知道JS中浮点数的计算是不精确的,当误差小于某个很小的数后我们就认为计算正确
Number.MAX_SAFE_INTEGER JS能表示的最大整数=Math.pow(2,53)-1=9007199254740991 JS能正确表示的整数范围(安全范围)是-2的53次方~2的53次方,超出这个范围就无法正确表示了Math.pow(2,53)=== Math.pow(2.53)+1 // 返回true
Number.MIN_SAFE_INTEGER JS能表示的最小整数=-Number.MAX_SAFE_INTEGER
Number.isSafeInteger() 判断一个整数是否在安全范围内,是返回true否则返回false

3. Math对象

Math方法(ES6新增) 用法
Math.tunc() 去除一个数的小数部分,对于非数值先调用Number方法将其转换为数值,对于空值和无法截取整数的值返回Nan
Math.sign() 判断一个数是正数,负数,还是零。对于非数值,会先将其转换为数值 返回值:正数 +1 负数 -1 0返回0 -0返回-0 其他值 返回NaN
Math.cbrt() 计算一个数的立方根,非数值先转换为数值
Math.clz32() JS中整数用32位二进制形式表示,该方法返回一个数的32位无符号整数形式有多少个前导0
Math.imul() 返回两个数以32位带符号整数形式相乘的结果,返回的也是一个32位的带符号整数
Math.fround() 返回一个数的单精度浮点数形式
Math.hypot() 返回所有参数的平方和的平方根 Math.hypot(3,4) // 5
Math.expm1() Math.expm1(x)===Math.exp(x)-1
Math.log1p() Math.log1p(x)===Math.log(1+x) 注意 :JS中的log实际上是数学中的ln
Math.log10() 返回以10为底x的对数,如果x小于0返回NaN
Math.log2() 返回以2为底x的对数,如果x小于0返回NaN
Math.sinh(x) 返回x的双曲正弦
Math.cosh(x) 返回x的双曲余弦
Math.tanh(x) 返回x的双曲正切
Math.asinh() 返回x的反双曲正弦
Math.acosh() 返回x的反双曲余弦
Math.atanh() 返回x的反双曲正切
Math.signbit() 判断一个数的符号位是否已经设置,正数的符号位为0,符号位没有设置,负数的符号位为1,符号位已经设置。 返回值:如果参数是NaN,返回false 如果参数是-0,返回true 如果参数是负数,返回true 如果参数是正数,返回false 其它情况返回false

4. 指数运算符

ES2016新增了一个指数运算符(**)。

2 ** 2 // 4
2 ** 3 // 8

指数运算符可以与等号结合,形成一个新的赋值运算符(**=)。

let a = 3;
a **= 2 // 9
//等同于
let a = 3;
a = a ** 2 // 9

5. Integer 数据类型

5.1 简介

JavaScript所有数字都保存成64为浮点数,这决定了整数的精确程度只能到52个二进制位。

大于这个范围的整数,JavaScript是无法精确表示的,这使得JavaScript不适合进行科学和金融方面的精确计算。

现有一个提案,引入了新的数据类型 Integer 来解决这个问题。

Integer类型的数据只用来表示整数,没有位数的限制,任何位数的整数都可以精确表示。

为了与Number类型区别,Integer类型的数据必须使用后缀n来表示。

1n + 2n // 3n

二进制,八进制,十六进制的表示法都要加上后缀n。

0b1101n // 二进制
0o777n // 八进制
0xFFn // 十六进制

对于Integer类型的数据,typeof运算符将返回integer。

JS还提供了Integer队形,用来生成Integer类型的数值。

Integer(123) // 123n

但是注意不能生成Integer类型的对象,下面这样生成Integer对象的代码会报错。

new Integer() // TypeError

5.2 运算

在数学运算方面,Interger类型的+,-,*和 **这四个二元运算符与Number类型的行为一致。

除法运算 / 会舍去小数部分,返回一个整数。

9n/5n // 1n

下面两种运算符用在Integer中会报错:

  1. 不带符号的右移运算符>>>

    不带符号的右移运算符要求最高位补0,但是Integer类型没有最高位,导致这个运算符没有意义。

  2. 一元的求正运算符+

    一元运算符+在asm.js里面子那个是返回Number类型或报错。

Integer类型与Number类型不能混合运算。

1n + 1 // 报错

这是因为无论返回值是哪一种类型都会丢失信息,比如

(2n ** 53n + 1n) + 0.5

如果返回 Integer 类型,那么0.5会被舍去

如果返回 Number 类型,那么超出了安全范围,会超过53为精确数字,精度下降。

相等运算符(==)会改变数据类型,因此不能混合使用。

1n == 1 // TypeError

精确相等运算符 (===) 不会改变数据类型,因此可以混合使用。

1n === 1 // false

五分钟了解ES6对数值的扩展的更多相关文章

  1. ES6入门——数值的扩展

    1.二进制和八进制表示法 ES6提供了二进制和八进制数值的新的写法,分别用前缀0b或0B和0o或0O表示. 2.Number.isFinite(),Number.isNaN() ES6在Number对 ...

  2. 【ES6】数值的扩展

    1.Number.isFinite()和Number.isNaN()[只对数值有效] (1)Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity. [ ...

  3. ES6之数值的扩展学习

    引自:http://es6.ruanyifeng.com/#docs/number 二进制和八进制表示法 ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示. 0 ...

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

    ES6 对于数值类型 (Number) 进行了一下扩展: 1.对于二进制和八进制提供了新的写法 ES6对于二进制和八进制的数值提供了新的写法,分别用0b (或者0B) 和0o (或者0o) 表示.例如 ...

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

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

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

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

  7. ES6 数值的扩展

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

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

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

  9. ES6中对数值的扩展

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

随机推荐

  1. 2019-11-3:渗透测试,基础学习,bypass类型笔记

    等价字符 空格:%20,+,(),%0a,%09,%a0,%0b,%0c,%0d,/**/等 =:like,regexp,liker,<>,! =等 and:&& or:x ...

  2. JavaScript笔记十二

    1.DOM对CSS的操作 - 读取和修改内联样式 - 使用style属性来操作元素的内联样式 - 读取内联样式: 语法:元素.style.样式名 - 例子: 元素.style.width 元素.sty ...

  3. Unity 工作经历+近期面试经历(二)

    注册博客园后,我原本打算每一份工作经历都记录下来.但是,这份工作已经换了半年了,好几次想要写,又不知道该怎么写.太多的负能量.我始终相信,情绪是会传染的.我基本决定放弃写这篇文章了.就让时间去淡化经历 ...

  4. 2019年12月1日Linux开发手记

    配置ubuntu摄像头: 1.设置→添加→usb控制器→兼容usb3.0 2.虚拟机→可移动设备→web camera→连接(断开主机) 3.查看是否配置成功,打开终端,输入: susb ls /de ...

  5. 数据表与简单java类——一对多映射

    例如:给定一个分类表和子分类表 得到如下信息: 1.一个分类的完整信息: 2.根据分类获取其对应的子分类 package Mapping_transformation; class item { pr ...

  6. python 2.x 中print >> sys.out ,print 与sys.out.write()的关系

    print 会调用 sys.stdout 的 write 方法 以下两行在事实上等价: sys.stdout.write('hello,python'+'\n') print 'hello,pytho ...

  7. 一个http请求的详细过程

    一个http请求的详细过程 我们来看当我们在浏览器输入http://www.mycompany.com:8080/mydir/index.html,幕后所发生的一切. 首先http是一个应用层的协议, ...

  8. X86架构CPU常识(主频,外频,FSB,cpu位和字长,倍频系数,缓存,CPU扩展指令集,CPU内核和I/O工作电压,制造工艺,指令集,超流水线与超标量)

    1.主频 主频也叫时钟频率,单位是MHz,用来表示CPU的运算速度. CPU的主频=外频×倍频系数.很多人认为主频就决定着CPU的运行速度,这不仅是个片面的,而且对于服务器来讲,这个认识也出现了偏差. ...

  9. day26

    绑定方法 分为对象绑定方法和类的绑定方法 绑定方法的特殊之处 绑定给谁就是谁来调用 类的绑定方法 绑定给类,类来调用,会把类自身传过来 不需要通过对象 ,只需要通过类就能获取到一些东西的时候,用类的绑 ...

  10. sar命令,linux中最为全面的性能分析工具之一

    sar是System Activity Reporter(系统活动情况报告)的缩写.这个工具所需要的负载很小,也是目前linux中最为全面的性能分析工具之一.此款工具将对系统当前的状态就行取样,然后通 ...