ES6 之数值的常用拓展

Number.parseInt、Number.parseFloat

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

// ES5的写法
parseInt('10.24') // 10
parseFloat('10.24#') // 10.24

// ES6的写法
Number.parseInt('10.24') // 10
Number.parseFloat('10.24#') // 10.24

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(3.0000000000000002) // true
Number.isInteger(5E-325) // true

上面第一种情况的数值转换成二进制精度超过了 53 个二进制位,所以最后的 2 被丢弃了
第二种情况数值的绝对值小于 JavaScript 能够分辨的最小值即 Number.MIN_VALUE(5E-324)因此被自动转换成 0

如果对数据精度的要求较高,不建议使用 Number.isInteger 判断一个数值是否为整数

指数运算符

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

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

Math.trunc

Math.trunc 方法用于去除一个数的小数部分,返回整数部分

Math.trunc(4.1) // 4
Math.trunc(4.9) // 4
Math.trunc(-4.1) // -4
Math.trunc(-4.9) // -4
Math.trunc(-0.1234) // -0

对于非数值,Math.trunc 内部使用 Number 方法将其先转为数值

Math.trunc('123.456') // 123
Math.trunc(true) //1
Math.trunc(false) // 0
Math.trunc(null) // 0

对于空值和无法截取整数的值,返回 NaN

Math.trunc(NaN);      // NaN
Math.trunc('foo');    // NaN
Math.trunc();         // NaN
Math.trunc(undefined) // NaN

Math.sign

Math.sign 方法用来判断一个数到底是正数、负数、还是零

返回值 含义
+1 参数为正数
-1 参数为负数
0 参数为 0
-0 参数为 -0
NaN 参数为其它值
Math.sign(-5) // -1
Math.sign(5) // +1
Math.sign(0) // +0
Math.sign(-0) // -0
Math.sign(NaN) // NaN

如果参数是非数值,会自动转为数值,对于那些无法转为数值的值,会返回NaN

Math.sign('')  // 0
Math.sign(true)  // +1
Math.sign(false)  // 0
Math.sign(null)  // 0
Math.sign('9')  // +1
Math.sign('foo')  // NaN
Math.sign()  // NaN
Math.sign(undefined)  // NaN

本文转载自 http://es6.ruanyifeng.com/#docs/number 并进行整理

除特殊说明外本人博客均属原创,转载请注明出处:http://blog.johnhan.cn/blog_1024.html
鄂ICP备17018604号-1  鄂公网安备42060702000030号