数值的扩展

282 阅读3分钟

Number.isFinite() 和 Number.isNaN()

Number.isFinite() 用来检查一个数值是否为有限的(finite),其中,非数字和 NAN 都是 false。

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

注意与 isFinite() 和 isNaN() 的区别:

isFinite() 和 isNaN() 先调用 Number() 将非数值转换为数值,再进行判断。Number.isFinite() 和 Number.isNaN() 只对数值有效,对于非数值一律返回 false。Number.isNaN() 只有对于 NaN 才返回 true ,非 NaN 一律返回 false。

isFinite(12) // true
isFinite("12") // true
Number.isFinite(12) // true
Number.isFinite("12") // false

isNaN(NaN) // true
isNaN("NaN") // true
Number.isNaN(NaN) // true
Number.isNaN("NaN") // false
Number.isNaN(1) // false

Number.isInteger()

判断一个值是否为整数。在 JavaScript 内部,整数和浮点数是同样的存储方法,所以 3 和 3.0 被视为同一个值。

Number.isInteger(25) // true
Number.isInteger("25") // false
Number.isInteger(24.0) // true
Number.isInteger(23.2) // false
Number.isInteger(true) // false

Number.EPSILON

这个变量为 ES6 在 Number 对象上新增的一个极小的常量,目的是检查浮点运算是否为精确的结果,当浮点运算误差小于该常量,我们可以认为得到正确的结果。

Number.EPSILON // 2.220446049250313e-16
0.1 + 0.2 - 0.3 // 5.551115.123125783e-17,小于Number.EPSILON,可认为得到正确的结果

Number.isSafeInteger()

JavaScript 能准确表示的整数范围在 -253 到 253 之间(不含两个端点),这两个端点为 Number.MIN_SAFE_INTEGER 和 Number.MAX_SAFE_INTEGER 两个常量。Number.isSafeInteger() 用来判断一个整数是否落在这个范围内。

Number.isSafeInteger(3) // true
Number.isSafeInteger(3.3) // false
Number.isSafeInteger(Infinity) // false
Number.isSafeInteger('a') // false

Math对象的扩展

  • Math.trunc():去除一个数的小数部分,返回整数部分。对于非数值,先用 Number转换为数值,对于空值和无法截取整数的值,返回 NaN。
  • Math.sign():判断一个数是正数、负数还是零。对于非数值,先转换为数值。返回值有 5 个:
    • +1:参数为正数
    • 0:参数为 0
    • -0:参数为 -0
    • -1:参数为负数
    • NaN:其他值
  • Math.cbrt():计算一个数的立方根,对于非数值先用 Number() 转换为数值
  • Math.clz32():返回一个数的32位无符号整数形式下,有多少个前导 0。对于小数, Math.clz32 只考虑整数部分。
  • Math.imul():将两个参数分别转换为 32 位整数,相乘后返回 32 位运算结果
  • Math.fround():将数字转换为最接近的单精度浮点形式的数字
  • Math.hypot():返回所有参数的平方和的平方根。对于不是数值的参数,转换为数值,只要参数中有一个无法转换为数值,结果就会返回 NaN

对数方法:

  • Math.expm1(x):返回 ex - 1,即 Math.exp(x) - 1
  • Math.log1p(x):返回 ln(1+x),即 Math.log(1+x),如果 x 小于 -1,则返回 NaN
  • Math.log10(x):返回以 10 为底的 x 的对数,如果 x 小于 0,则返回 NaN
  • Math.log2(x):返回以 2 为底的 x 的对数,如果 x 小于 0,则返回NaN

双曲函数方法:

  • Math.sinh(x):返回 x 的双曲正弦
  • Math.cosh(x):返回 x 的双曲余弦
  • Math.tanh(x):返回 x 的双曲正切
  • Math.asinh(x):返回 x 的反双曲正弦
  • Math.acosh(x):返回 x 的反双曲余弦
  • Math.atanh(x):返回 x 的反双曲正切

指数运算符

ES6新增了指数运算符—— ( ** ),指数运算符可以与等号结合,形成新的赋值运算符( **= )

2 ** 2 // 4
2 ** 3 // 8
let a = 2;
a **= 3; // 8