五分钟了解ES6对数值的扩展
数值的扩展(ES6)
1. 二进制八进制表示法
ES6提供了二进制和八进制数值的新写法,分别用前缀 0b(或0B)
和 0o(或0O)
表示。
如果要将使用 0b
和 0x
的数字转换为十进制,要使用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中会报错:
不带符号的右移运算符>>>
不带符号的右移运算符要求最高位补0,但是Integer类型没有最高位,导致这个运算符没有意义。
一元的求正运算符+
一元运算符+在asm.js里面子那个是返回Number类型或报错。
Integer类型与Number类型不能混合运算。
1n + 1 // 报错
这是因为无论返回值是哪一种类型都会丢失信息,比如
(2n ** 53n + 1n) + 0.5
如果返回 Integer 类型,那么0.5会被舍去
如果返回 Number 类型,那么超出了安全范围,会超过53为精确数字,精度下降。
相等运算符(==)会改变数据类型,因此不能混合使用。
1n == 1 // TypeError
精确相等运算符 (===) 不会改变数据类型,因此可以混合使用。
1n === 1 // false
五分钟了解ES6对数值的扩展的更多相关文章
- ES6入门——数值的扩展
1.二进制和八进制表示法 ES6提供了二进制和八进制数值的新的写法,分别用前缀0b或0B和0o或0O表示. 2.Number.isFinite(),Number.isNaN() ES6在Number对 ...
- 【ES6】数值的扩展
1.Number.isFinite()和Number.isNaN()[只对数值有效] (1)Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity. [ ...
- ES6之数值的扩展学习
引自:http://es6.ruanyifeng.com/#docs/number 二进制和八进制表示法 ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示. 0 ...
- JavaScript学习笔记--ES6学习(五) 数值的扩展
ES6 对于数值类型 (Number) 进行了一下扩展: 1.对于二进制和八进制提供了新的写法 ES6对于二进制和八进制的数值提供了新的写法,分别用0b (或者0B) 和0o (或者0o) 表示.例如 ...
- ES6的新特性(5)——数值的扩展
数值的扩展 二进制和八进制表示法 ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示. 0b111110111 === 503 // true 0o767 === ...
- ES6学习笔记(三)——数值的扩展
看到这条条目录有没有感觉很枯燥,觉得自己的工作中还用不到它所以实在没有耐心看下去,我也是最近得闲,逼自己静下心来去学习去总结,只有在别人浮躁的时候你能静下心来去学去看去总结,你才能进步.毕竟作为前端不 ...
- ES6 数值的扩展
在ES5中,我们存在几个全局函数 isNaN函数,isFinite函数,parseInt函数,parseFloat函数等,对于这些全局函数的使用很简单,就拿isNaN函数来举例. ES5中的写法是: ...
- ES6学习笔记(5)----数值的扩展
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ 数值的扩展 1.Number对象的扩展(1)javascript的全局函数isNaN,isFin ...
- ES6中对数值的扩展
上一节和大家学习了字符串的扩展,这一节轮到了数值,我们一起来学习数值的扩展. 剧透一下,这一节并不会很烧脑,都是介绍类的知识讲解,理解性的东西不多,初学者们也可以愉快地看完. 传统的写法 在介绍数值的 ...
随机推荐
- PostGIS 爆管分析之找出上游阀门
环境: Win10 ArcMap10.4(用于数据处理) postgresql9.4 postgis2.2.3 pgRouting2.3(postgresql插件) 说明: 继上一篇文章做了爆管分析找 ...
- Nginx 代理本地文件夹(Windows环境)
安装环境: win10 nginx-1.17.2 步骤: 一.打开nginx.conf 路径:\nginx-1.17.2\conf\nginx.conf 二.编辑 配置跨域以及代理文件夹路径 三.启动 ...
- 经典sql面试题(学生表_课程表_成绩表_教师表)
转载:https://www.cnblogs.com/qixuejia/p/3637735.html 表架构 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cna ...
- java this,super简单理解
*****this****** 表示对当前对象的引用. 作用:1.区分实例变量和局部变量(this.name----->实例变量name) 2.将当前对象当做参数传递给其它对象和方法.利用thi ...
- Linux:AWK基础
AWK是一个强大的文本分析工具,算是Linux系统特别有用的命令了,在日志分析.文件内容分析中扮演特别重要的角色. AWK说明 简单来说awk就是把文件逐行的读入,以指定的分隔符将每行分割,分割后的部 ...
- 能不能自己写个类,也叫java.lang.String?
可以,但在应用的时候,需要用自己的类加载器去加载,否则,系统的类加载器永远只是去加载jre.jar包中的那个java.lang.String.由于在tomcat的web应用程序中,都是由webapp自 ...
- nginx部署安装
首先需要下载Nginx软件包 nginx软件官方下载地址:[nginx官方下载连接](http://www.nginx.org) 建议选择稳定的软件版本,如果练习使用当然是无所谓,随便什么版本都可以, ...
- DevOps组织中应用架构师的新定位与实践
[摘要] 针对应用架构师相关窘境,在现代化的应用开发中,DevOps组织需要定义应用架构师职责,使应用架构师与DevOps团队各角色更有效的沟通,交付更有价值的产品.在多数情况下,应用架构师不是Dev ...
- 【华为云分享】MongoDB-系统时钟跳变引发的风波
目录 背景 一. 对 oplog 的影响 oplog 原理 二.主备倒换 小结 声明:本文同步发表于 MongoDB 中文社区,传送门:http://www.mongoing.com/archives ...
- 关于token你需要知道的
第一.token的生成 1)token的生成接口为 https://{你的endpoint} /v3/auth/tokens 比如我是北京一的,我的endpoint就是 iam.cn-north-1. ...