随笔 - 24  文章 - 0  评论 - 0  阅读 - 8460

es6 --数值的扩展

一、二进制和八进制表示法

  ES6提供了二进制和八进制数值的新的写法

    0b(0B) -- 二级制的前缀

    0o(00)  -- 八进制的前缀

0b111110111 === 503 // true
0o767 === 503 // true

  如果将0b和0o前缀的字符串数值转为十进制,要使用Number方法

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

二、Number.isFinite() Number.isNan()

  Number.isFinite() 用来检查一个数值是否为有限的finite,即不是Infinity

  注意:如果参数类型不是数值,Number.isFinite一律返回false

Number.isFinite(15); // true
Number.isFinite(0.8); // true
Number.isFinite(NaN); // false
Number.isFinite(Infinity); // false
Number.isFinite(-Infinity); // false
Number.isFinite('foo'); // false
Number.isFinite('15'); // false
Number.isFinite(true); // false

  Number.isNaN() 用来检查一个值是否为NaN

  如果参数类型不是数值,Number.isNaN一律返回false

Number.isNaN(NaN) // true
Number.isNaN(15) // false
Number.isNaN('15') // false
Number.isNaN(true) // false
Number.isNaN(9/NaN) // true
Number.isNaN('true' / 0) // true
Number.isNaN('true' / 'true') // true

  它们与传统的全局方法isFinite()和isNaN()的区别在于,传统方法先调用Number()将非数值的值转为数值,再进行判断,而这两个新方法只对数值有效,Number.isFinite()对于非数值─律返回false , Number.isNaN()只有对于NaN才返回true,非NaN—律返回false。

复制代码
isFinite(25) // true
isFinite("25") // true
Number.isFinite(25) // true
Number.isFinite("25") // false
isNaN(NaN) // true
isNaN("NaN") // true
Number.isNaN(NaN) // true
Number.isNaN("NaN") // false
Number.isNaN(1) // false
复制代码

三、Number.parseInt()  Number.parseFloat()

  ES6将全局方法parseInt()和parseFloat(),移植到Number对象上,行为完全保持不变

  这样做的目的,是逐步减少全局性方法,使得语言逐步模块化

复制代码
// ES5的写法
parseInt('12.34') // 12
parseFloat('123.45#') // 123.45
// ES6的写法
Number.parseInt('12.34') // 12
Number.parseFloat('123.45#') // 123.45


Number.parseInt === parseInt // true
Number.parseFloat === parseFloat // true
复制代码

四、Number.isInteger()

Number.isInteger()用来判断一个数值是否为整数

Number.isInteger(25) // true
Number.isInteger(25.1) // false

JavaScript内部,整数和浮点数采用的是同样的储存方式,所以25和25.0被视为同一个值

Number.isInteger(25) // true
Number.isInteger(25.0) // true

如果参数不是数值,Number.isInteger返回false

Number.isInteger() // false
Number.isInteger(null) // false
Number.isInteger('15') // false
Number.isInteger(true) // false

位数过多会被省略,总之,如果对数据精度的要求较高,不建议使用Number.isInteger()判断一个数值是否为整数。

五、Number.EPSILON

  新增的一个极小的常量Number.EPSILON。它表示1与大于1的最小浮点数之间的差

  对于64位浮点数来说,大于1的最小浮点数相当于二进制的1.00..001,小数点后面有连续51个零。这个值减去1之后,就等于2的-52次方。

Number.EPSILON === Math.pow(2, -52)
// true
Number.EPSILON
// 2.220446049250313e-16
Number.EPSILON.toFixed(20)
// "0.00000000000000022204"
0.1 + 0.2
// 0.30000000000000004
0.1 + 0.2 - 0.3
// 5.551115123125783e-17
5.551115123125783e-17.toFixed(20)
// '0.00000000000000005551'

0.1 + 0.2 === 0.3 // false

Number.EPSILON可以用来设置“能够接受的误差范围”

六、Math对象的扩展

  math.trunc() 用于去除一个数的小数部分

  math.sign() 用来判断一个数到底是正数、负数还是零

  math.cbrt() 用于计算一个数的立方根

  。。。。。

七、指数运算符

  es6新增了一个指数运算符 **

  2**2 //4

  2**3 //8

  这个运算符的一个特点是右结合,而不是常见的左结合。多个指数运算符连用时,是从最右边开始计算的

// 相当于 2 ** (3 ** 2)
2 ** 3 ** 2
// 512

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

let a = 1.5;
a **= 2;
// 等同于 a = a * a;
let b = 4;
b **= 3;
// 等同于 b = b * b * b;

 

posted on   zhanlanzzz  阅读(28)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示