本文详细介绍 ES6 中 Number 和 Math 对象的新增方法。重点解析 Number.isFinite 和 Number.isNaN 的类型严格检测机制,以及 Number.parseInt 和 Number.parseFloat 的隐式转换规则。同时深入讲解 Math 对象中 Math.trunc、Math.sign、Math.cbrt 和 Math.hypot 等数学计算方法的用法与注意事项,帮助开发者更精准地处理数值类型与复杂数学运算。
Number 对象的扩展方法
Number 对象的扩展
Number.isFinite() 方法用于检测一个值是否为有限的数值(即有穷数)。
console.log(Number.isFinite(1)) // true
console.log(Number.isFinite(3.1415926)) // true
console.log(Number.isFinite('1')) // false
console.log(Number.isFinite(NaN)) // false
console.log(Number.isFinite('1e')) // false
console.log(isFinite('1')) // true
console.log(isFinite('1e')) // false
前两个示例检测的是数字类型,无论是浮点数还是正负整数,均属于有穷数值。后三个示例中,有两个为字符串类型,由于该方法不进行隐式类型转换,因此返回 false(视为无穷或非有限)。需要注意的是,NaN 也被视为非有限值。最后两个示例使用了全局的 isFinite 方法,字符串数字会被转换为数值从而检测为有限,但若字符串中包含其他非数字字符,则无法转换,结果为 false。
Number.isNaN() 方法用于检测一个值是否等于 NaN。
console.log(Number.isNaN(1)) // false
console.log(Number.isNaN(3.1415926)) // false
console.log(Number.isNaN('1')) // false
console.log(Number.isNaN(NaN)) // true
console.log(Number.isNaN('1e')) // false
通过上述示例可以了解,该方法专门用于判断值是否为 NaN,且不会进行隐式类型转换。
Number.parseInt() 涉及隐式类型转换。
console.log(Number.parseInt(1)) // 1
console.log(Number.parseInt(3.1415926)) // 3
console.log(Number.parseInt(3.6415926)) // 3
console.log(Number.parseInt('1es5')) //1
console.log(Number.parseInt('asd123')) // NaN
console.log(Number.parseInt(NaN)) // NaN
上述示例展示了转换过程:该方法可将浮点数转换为正整数,且不进行四舍五入操作。如果字符串以数字开头,则直接提取并转换该数字;若字符串不以数字开头,则返回 NaN。
Number.parseFloat() 进行类型转换时保留浮点数格式。
console.log(Number.parseFloat(1)) // 1
console.log(Number.parseFloat(3.1415926)) // 3.1415926
console.log(Number.parseFloat('1es5#')) // 1
console.log(Number.parseFloat('#asd123')) //NaN
console.log(Number.parseFloat(NaN)) // NaN
上述示例展示了几个简单案例,parseFloat 与 parseInt 的主要区别在于 parseFloat 会保留浮点数部分。
Number.isInteger() 方法用于检测一个值是否为整数。
console.log(Number.isInteger(1)) // true
console.log(Number.isInteger(3.1415926)) // false
console.log(Number.isInteger('123')) // false
console.log(typeof (Math.trunc('1.23'))) // number
console.log(Number.isInteger('1.23')) // false
console.log(Number.isInteger(null)) // false
console.log(Number.isInteger(3.0000000000000002)) // true
console.log(Number.parseFloat(Array)) // NaN
上述示例中,若值为整数则返回 true,否则返回 false。该方法不会将字符串类型进行隐式转换。此外,如果检测的值小于 JavaScript 能表示的最小精度值,可能会出现误判;同样,若涉及二进制位数超出当前实现要求,也可能导致误判。
Math 对象的扩展方法
Math 对象的扩展
Math.trunc() 用于去除浮点数的小数部分,返回整数。这相当于一种转换操作,但不涉及四舍五入。
console.log(Math.trunc(1.8)) // 1
console.log(Math.trunc(3.1415926)) // 3
console.log(Math.trunc('3.1415926')) // 3
console.log(Math.trunc('1.23')) // 1
console.log(Math.trunc('1.23#')) // NaN
console.log(Math.trunc('#1.23')) // NaN
console.log(Math.trunc()) // NaN
console.log(Math.trunc(-0.25)) // -0
上述示例列举了几个新增的 Math 对象方法。可以看出,该方法能将字符串数字转换为数值,并通过类型检测确认为 number 类型。如果数字字符中包含其他非数字字符或为空字符串,则返回 NaN。
Math.sign() 用于判断一个数是正数、负数还是零。对于非数值类型,该方法会先将其转换为数值。
console.log(Math.sign(1.8))
console.log(Math.sign(3.1415926))
console.log(Math.sign('3.1415926'))
console.log(Math.sign('1.23#'))
console.log(Math.sign('#1.23'))
console.log(Math.sign(-0))
console.log(Math.sign(-2))
上述示例中,检测正整数和负数时分别返回 1 或 -1。这是因为除 0 以外的正数均返回 1,除 -0 以外的负数均返回 -1。该方法同样会先执行 Number 类型的转换,将字符串数字转为数值;若包含其他无法转换的符号,则返回 NaN。
Math.cbrt() 用于计算立方根。

console.log(Math.cbrt(4)) // 1.5874010519681996
console.log(Math.cbrt('4')) // 1.5874010519681996
console.log(Math.cbrt('2q')) // NaN
console.log(Math.cbrt('q2')) // NaN
console.log(Math.cbrt('16')) // 2.5198420997897464
上述示例体现了 Math 新增的方法。该方法先进行 Number 类型转换,然后进行计算。如果不是纯数字的字符串类型,转换将失败并返回 NaN。
Math.hypot() 返回所有参数平方和的平方根,支持任意数量的参数。
console.log(Math.hypot(4, 4)) // 5.656854249492381
console.log(Math.hypot('4', 4, 3)) // 6.4031242374328485
console.log(Math.hypot('2q', 4)) // NaN
console.log(Math.hypot('q2', 4)) // NaN
console.log(Math.hypot('16', 4)) // 16.492422502470642
上述方法同样会先进行数值转换,若有一个参数无法转换,则返回 NaN。
对数相关方法
对数方法
Math.log1p() 返回 1 加上参数的自然对数,如果参数小于 -1,则返回 NaN。
console.log(Math.log1p(1)) // 0.6931471805599453 也相当于0
console.log(Math.log1p(-1)) //-Infinity
console.log(Math.log1p(-2)) // NaN
console.log(Math.log1p('-1')) // -Infinity
console.log(Math.log1p('-2q')) // NaN
Math.log10() 返回以 10 为底的对数,如果参数小于 0,则返回 NaN。
console.log(Math.log10(10)) // 1
console.log(Math.log10(5)) // 0.6989700043360189
console.log(Math.log10(20)) // 1.3010299956639813
console.log(Math.log10(2000)) // 3.3010299956639813
Math.log2() 返回以 2 为底的对数,如果参数小于 0,则返回 NaN。
console.log(Math.log10(10)) // 3.321928094887362
console.log(Math.log10(5)) // 2.321928094887362
console.log(Math.log10(20)) // 4.321928094887363
console.log(Math.log10(2000)) // 10.965784284662087
console.log(Math.log2('2000')) // 10.965784284662087
上述方法同样先进行数值转换,再进行计算。
总结:数值扩展主要涉及针对数字类型的新方法使用。由于通常存在较复杂的公式,我们可以根据方法得出的结果查找规律并加以应用,建议多加了解。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。