ES6 Math对象新增方法详解:截断、符号、立方根及三角对数运算
本文详细介绍ES6中Math对象新增的方法,包括Math.trunc去除小数部分、Math.sign判断正负零、Math.cbrt计算立方根、Math.clz32统计前导零、Math.imul整数乘法、Math.fround单精度转换及Math.hypot平方和开方。此外涵盖4个对数方法(expm1, log1p, log10, log2)和6个双曲三角函数,以及ES2016新增的指数运算符**及其赋值形式**=,并提供兼容性模拟代码。
ES6 Math对象新增方法概览
本文通过实例详解ES6中Math对象新增的方法,供读者参考学习。
Math.trunc():去除小数部分
Math.trunc()
Math.trunc方法用于去除数值的小数部分,并返回其整数部分。
在尚未支持该方法的运行环境中,可通过以下代码进行模拟实现。
Math.trunc = Math.trunc || function(x) {
return x < 0 ? Math.ceil(x) : Math.floor(x);
};
Math.sign():判断正负与零
Math.sign()
Math.sign方法用于判断数值的正负性,区分正数、负数或零。
在尚未支持该方法的运行环境中,可通过以下代码进行模拟实现。
Math.sign = Math.sign || function(x) {
x = +x; // convert to a number
if (x === 0 || isNaN(x)) {
return x;
}
return x > 0 ? 1 : -1;
};
Math.cbrt():计算立方根
Math.cbrt()
Math.cbrt方法用于计算并返回数值的立方根。
在尚未支持该方法的运行环境中,可通过以下代码进行模拟实现。
Math.cbrt = Math.cbrt || function(x) {
var y = Math.pow(Math.abs(x), 1/3);
return x < 0 ? -y : y;
};
Math.clz32()、Math.imul()与Math.fround()
Math.clz32()
JavaScript中的整数采用32位二进制表示,Math.clz32方法返回一个数转换为32位无符号整数形式后的前导零个数。
Math.imul()
Math.imul方法返回两个数以32位带符号整数形式相乘的结果,返回值同样为32位带符号整数。
Math.fround()
Math.fround方法用于返回数值的单精度浮点数形式。
在尚未支持该方法的运行环境中,可通过以下代码进行模拟实现。
Math.fround = Math.fround || function(x) {
return new Float32Array([x])[0];
};
Math.hypot():平方和的平方根
Math.hypot()
Math.hypot方法返回所有参数平方和的平方根。
ES6新增对数方法
对数方法
ES6新增了4个与对数相关的方法。
(1) Math.expm1()
Math.expm1(x)返回e的x次方减1的结果,即Math.exp(x) - 1。
在尚未支持该方法的运行环境中,可通过以下代码进行模拟实现。
Math.expm1 = Math.expm1 || function(x) {
return Math.exp(x) - 1;
};
(2)Math.log1p()
Math.log1p(x)方法返回1加x的自然对数,即Math.log(1 + x)。若x小于-1,则返回NaN。
在尚未支持该方法的运行环境中,可通过以下代码进行模拟实现。
Math.log1p = Math.log1p || function(x) {
return Math.log(1 + x);
};
(3)Math.log10()
Math.log10(x)返回以10为底的x的对数。若x小于0,则返回NaN。
在尚未支持该方法的运行环境中,可通过以下代码进行模拟实现。
Math.log10 = Math.log10 || function(x) {
return Math.log(x) / Math.LN10;
};
(4)Math.log2()
Math.log2(x)返回以2为底的x的对数。若x小于0,则返回NaN。
在尚未支持该方法的运行环境中,可通过以下代码进行模拟实现。
Math.log2 = Math.log2 || function(x) {
return Math.log(x) / Math.LN2;
};
ES6新增三角函数方法
三角函数方法
ES6新增了6个三角函数相关的方法。
Math.sinh(x) 返回x的双曲正弦(hyperbolic sine)
Math.cosh(x) 返回x的双曲余弦(hyperbolic cosine)
Math.tanh(x) 返回x的双曲正切(hyperbolic tangent)
Math.asinh(x) 返回x的反双曲正弦(inverse hyperbolic sine)
Math.acosh(x) 返回x的反双曲余弦(inverse hyperbolic cosine)
Math.atanh(x) 返回x的反双曲正切(inverse hyperbolic tangent)
Math.signbit()与指数运算符**
Math.signbit()
Math.sign()用于判断数值的正负,但若参数为-0,它将返回-0。
ES2016新增了一个指数运算符(**)。
指数运算符可与等号结合,形成新的赋值运算符(**=)。
let a = 2;
a **= 2;
// 等同于 a = a * a;
let b = 3;
b **= 3;
// 等同于 b = b * b * b;
注:在vp8引擎中与Math.pow()结果存在差异。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《ECMAScript6(ES6)入门教程》、《JavaScript字符与字符串操作技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript错误与调试技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
JS中将数组和对象混合组装为JSON字符串
2026-11-05 16:41:42
JS运算符优先级与结合性的区别是什么?
2026-11-05 13:22:02
JS Map怎么只遍历Key或Value
2026-11-05 13:00:36
D3.js 与 ECharts 选型对比:灵活性 vs 开发效率
2026-11-05 09:45:01
为什么JS中typeof []返回object:数组类型检测误区解析
2026-11-04 19:50:47
