Math Extensions ?
- Stage: Unstaged
- Status: Withdrawn
- ECMAScript edition: —
- Synchronized: Aug 28, 2026
- 中文译文 · Source repository
This proposal aims to add common mathematical functions (like degrees/radians conversion, scale, clamp) as built-in Math methods, since these functions are frequently implemented inconsistently in many JS libraries. It references implementations in Java, Python, Racket, and Rust.g., Math.map vs Math.scale) and polyfills available.
The README below comes from the upstream repository and may contain outdated stage or status metadata. Use the proposal details above as the current source of truth.
Math Extensions Proposal
Champion
Rick Waldron
Status
This proposal is currently stage 1 of the TC39 process.
Motivation
These functions exist in many, many JS libraries either hand rolled or via many modules on npm. Providing them as built-ins serves to pave cow path. Implementations and naming is inconsistent. Several other languages offer these as built-ins.
Java
- https://docs.oracle.com/javase/7/docs/api/java/lang/Math.html
MathMath.toDegrees(double angrad)Math.toRadians(double angdeg)
- JSR275
- JScience
Python
- Math
- https://docs.python.org/2/library/math.html#angular-conversion
- https://docs.python.org/3/library/math.html#angular-conversion
mathmath.degrees(x)math.radians(x)
- Units
Racket
- Math
- 4.2.2.10 Extra Constants and Functions
- Operations on Measures
- 1.1.1 Operations on Measures
Rust
Questions
Math.map- Is it...
Math.scale<-- thisMath.mapMath.remap
- Should there be a corresponding
Math.fmap? (ie. https://tc39.github.io/ecma262/#sec-math.fround, Step 3 & 4 convert result to IEEE 754-2008 binary32 (using roundTiesToEven), then to IEEE 754-2008 binary64).
- Is it...
Math.constrain- Is it...
Math.constrainMath.clamp
- Is it...
Polyfills
- Polyfill.
- Also, a polyfill is available in the core-js library. You can find it in the ECMAScript proposals section.