数值的扩展(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. 词袋模型(BOW,bag of words)和词向量模型(Word Embedding)概念介绍

    例句: Jane wants to go to Shenzhen. Bob  wants to go to Shanghai. 一.词袋模型 将所有词语装进一个袋子里,不考虑其词法和语序的问题,即每个 ...

  2. 高德JS依赖分析工程及关键原理

    一.背景 高德 App 进行 Bundle 化后,由于业务的复杂性,Bundle 的数量非常多.而这带来了一个新的问题——Bundle 之间的依赖关系错综复杂,需要进行管控,使 Bundle 之间的依 ...

  3. 深入理解.NET Core的基元(三) - 深入理解runtimeconfig.json

    原文:Deep-dive into .NET Core primitives, part 3: runtimeconfig.json in depth 作者:Nate McMaster 译文:深入理解 ...

  4. SpringBoot 整合 Zookeeper 接入Starring微服务平台

    背景 最近接的一个项目是基于公司产品Starring做的微服务支付平台,纯后台项目,实现三方支付公司和银行接口来完成用户账户扣款,整合成通用支付接口发布给前端调用. 但是扯蛋了,这边前端什么都不想做, ...

  5. EntityFramework Core 3多次Include导致查询性能低之解决方案

    前言 上述我们简单讲解了几个小问题,这节我们再来看看如标题EF Core中多次Include导致出现性能的问题,废话少说,直接开门见山. EntityFramework Core 3多次Include ...

  6. Docker部署Mysql集群

    单节点数据库的弊病 大型互联网程序用户群体庞大,所以架构必须要特殊设计 单节点的数据库无法满足性能上的要求 单节点的数据库没有冗余设计,无法满足高可用 单节点MySQL的性能瓶领颈 2016年春节微信 ...

  7. 小白的springboot之路(五)、集成druid

    0-前言 Druid阿里巴巴开源的一个java数据库连接池,是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能:集成它能够方便我们对数据库连接进行监控和分析,下面我们来集成它: ...

  8. 论文阅读 | Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks

    简述 在文本语义相似度等句子对的回归任务上,BERT , RoBERTa 拿到sota. 但是,它要求两个句子都被输入到网络中,从而导致巨大开销:从10000个句子集合中找到最相似的sentence- ...

  9. oracle监听查看、启动和停止

    oracle监听查看.启动和停止 查看监听lsnrctl status 停止监听lsnrctl stop 启动监听lsnrctl start

  10. Spring AOP简介与底层实现机制——动态代理

    AOP简介 AOP (Aspect Oriented Programing) 称为:面向切面编程,它是一种编程思想.AOP 是 OOP(面向对象编程 Object Oriented Programmi ...