The Math.sign()
function returns the sign of a number, indicating whether the number is positive, negative or zero.
Syntax
Math.sign(x)
Parameters
x
- A number.
Return value
A number representing the sign of the given argument. If the argument is a positive number, negative number, positive zero or negative zero, the function will return 1
, -1
, 0
or -0
respectively. Otherwise, NaN
is returned.
Description
Because sign()
is a static method of Math
, you always use it as Math.sign()
, rather than as a method of a Math
object you created (Math
is not a constructor).
This function has 5 kinds of return values, 1
, -1
, 0
, -0
, NaN
, which represent "positive number", "negative number", "positive zero", "negative zero" and NaN
respectively.
The argument passed to this function will be converted to number
type implicitly.
Examples
Using Math.sign()
Math.sign(3); // 1 Math.sign(-3); // -1 Math.sign('-3'); // -1 Math.sign(0); // 0 Math.sign(-0); // -0 Math.sign(NaN); // NaN Math.sign('foo'); // NaN Math.sign(); // NaN
Polyfill
if (!Math.sign) { Math.sign = function(x) { // If x is NaN, the result is NaN. // If x is -0, the result is -0. // If x is +0, the result is +0. // If x is negative and not -0, the result is -1. // If x is positive and not +0, the result is +1. return ((x > 0) - (x < 0)) || +x; // A more aesthetical persuado-representation is shown below // // ( (x > 0) ? 0 : 1 ) // if x is negative then negative one // + // else (because you cant be both - and +) // ( (x < 0) ? 0 : -1 ) // if x is positive then positive one // || // if x is 0, -0, or NaN, or not a number, // +x // Then the result will be x, (or) if x is // // not a number, then x converts to number }; }
In the above polyfill, no extra type-coercing is needed to make (x > 0) or (x < 0)
numbers because subtracting them from each other forces a type conversion from boolean to numbers.
Specifications
Specification | Status | Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Math.sign' in that specification. |
Standard | Initial definition. |
ECMAScript Latest Draft (ECMA-262) The definition of 'Math.sign' in that specification. |
Living Standard |
Browser compatibility
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic Support | 38 | (Yes) | 25 | No | 25 | 9 |
Feature | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
Basic Support | (Yes) | (Yes) | (Yes) | 25 | No | (Yes) | (Yes) |