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;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?