Math.sign() определяет знак числа.
Проще всего запомнить так: метод не меняет число и не округляет его, а просто показывает, положительное оно, отрицательное или ноль.
Синтаксис
Math.sign(x)
x - число, знак которого нужно определить.
Что делает Math.sign()
Метод возвращает:
1, если число положительное-1, если число отрицательное0, если передан0-0, если передан-0NaN, если значение нельзя интерпретировать как число
Примеры:
console.log(Math.sign(10)); // 1
console.log(Math.sign(-10)); // -1
console.log(Math.sign(0)); // 0
console.log(Math.sign(3.14)); // 1
console.log(Math.sign(-3.14)); // -1
Что возвращает Math.sign()
Math.sign() возвращает значение типа number.
const result = Math.sign(-25);
console.log(result); // -1
console.log(typeof result); // "number"
Важно: метод не возвращает true или false. Он возвращает именно число.
Положительные и отрицательные числа
Это основной сценарий использования Math.sign().
console.log(Math.sign(100)); // 1
console.log(Math.sign(-100)); // -1
Это удобно, когда нужно быстро понять знак числа без длинных условий.
Что происходит с 0
Если передать обычный ноль, результатом будет 0.
console.log(Math.sign(0)); // 0
Это логично: у нуля нет положительного или отрицательного знака в обычном смысле.
Что происходит с -0
Это один из самых важных нюансов у Math.sign().
console.log(Math.sign(-0)); // -0
Метод сохраняет отрицательный ноль и не превращает его в обычный 0.
Это можно проверить точнее так:
console.log(Object.is(Math.sign(-0), -0)); // true
console.log(Object.is(Math.sign(0), -0)); // false
То есть:
Math.sign(0)возвращает0Math.sign(-0)возвращает-0
Дробные числа
Math.sign() работает не только с целыми, но и с дробными значениями.
console.log(Math.sign(0.0001)); // 1
console.log(Math.sign(-0.0001)); // -1
Размер числа не важен. Важен только его знак.
Math.sign() не возвращает само число
Иногда кажется, что метод должен вернуть модифицированное значение, но это не так.
console.log(Math.sign(25)); // 1
console.log(Math.sign(-25)); // -1
Метод не возвращает 25 или -25. Он возвращает только информацию о знаке.
Math.sign() и Math.abs()
Math.sign() и Math.abs() часто используют рядом, но делают они разное.
console.log(Math.sign(-8)); // -1
console.log(Math.abs(-8)); // 8
Math.sign()показывает знак числаMath.abs()возвращает модуль числа
Если вам нужно понять направление, подходит Math.sign(). Если нужно получить положительное значение без знака, подходит Math.abs().
Без аргумента
Если вызвать Math.sign() без аргумента, результатом будет NaN.
console.log(Math.sign()); // NaN
Так происходит потому, что метод попытается обработать undefined как число.
Неявное приведение типов
Math.sign() сначала пытается привести аргумент к числу.
console.log(Math.sign("5")); // 1
console.log(Math.sign("-5")); // -1
console.log(Math.sign(null)); // 0
console.log(Math.sign(true)); // 1
console.log(Math.sign(false)); // 0
Ещё пример:
console.log(Object.is(Math.sign("-0"), -0)); // true
На практике лучше передавать в метод уже готовое число.
Массивы и странные значения
Из-за приведения типов некоторые значения могут вести себя неочевидно.
console.log(Math.sign([])); // 0
console.log(Math.sign([5])); // 1
console.log(Math.sign([1, 2])); // NaN
Это ещё одна причина, почему лучше не полагаться на неявное преобразование.
NaN и Infinity
Для специальных значений метод ведёт себя предсказуемо.
console.log(Math.sign(NaN)); // NaN
console.log(Math.sign(Infinity)); // 1
console.log(Math.sign(-Infinity)); // -1
Это полезно помнить:
NaNдаётNaNInfinityдаёт1-Infinityдаёт-1
Число не меняется
Math.sign() не изменяет исходное значение. Он только возвращает новый результат.
const value = -42;
const result = Math.sign(value);
console.log(value); // -42
console.log(result); // -1
Когда это полезно
Math.sign() удобно использовать, когда:
- нужно быстро определить знак числа
- вы работаете с направлением движения
- нужно понять, число положительное или отрицательное
- хочется заменить несколько условий короткой записью
Пример:
const speed = -12;
const direction = Math.sign(speed);
console.log(direction); // -1
Так можно, например, обозначить движение влево как -1, а вправо как 1.
Частые ошибки
Ожидать boolean вместо числа
console.log(Math.sign(5)); // 1
Метод возвращает не true, а число 1.
Думать, что для нуля всегда будет только 0
console.log(Math.sign(0)); // 0
console.log(Math.sign(-0)); // -0
В JavaScript есть отдельное значение -0, и Math.sign() его сохраняет.
Забывать про NaN
console.log(Math.sign(undefined)); // NaN
console.log(Math.sign([1, 2])); // NaN
Если значение нельзя корректно привести к числу, результатом будет NaN.
Быстрая памятка
Math.sign(x)определяет знак числа- метод возвращает
number 1означает положительное число-1означает отрицательное числоMath.sign(0)возвращает0Math.sign(-0)возвращает-0Math.sign(NaN)возвращаетNaN- это не boolean, а числовой результат
Коротко
Math.sign() - это стандартный способ быстро определить знак числа в JavaScript. Главное, что стоит запомнить: метод возвращает 1, -1, 0, -0 или NaN и при этом отдельно сохраняет отрицательный ноль.