Learn JavaScript

Math.abs() - метод для получения модуля числа в JavaScript

Math.abs() возвращает модуль числа.

Это значит:

  • положительное число остаётся как есть
  • отрицательное становится положительным
  • 0 остаётся 0

Синтаксис

Math.abs(x)

x - число, для которого нужно получить модуль.

Что делает Math.abs()

Метод возвращает расстояние числа от нуля без учёта знака.

console.log(Math.abs(5));   // 5
console.log(Math.abs(-5));  // 5
console.log(Math.abs(0));   // 0

То есть Math.abs() просто убирает знак минус, если он есть.

Что возвращает Math.abs()

Math.abs() возвращает число типа number.

const result = Math.abs(-12.7);

console.log(result);        // 12.7
console.log(typeof result); // "number"

Это именно число, а не строка.

Положительные и отрицательные числа

Если число уже положительное, ничего не меняется.

console.log(Math.abs(8)); // 8

Если число отрицательное, минус убирается.

console.log(Math.abs(-8)); // 8

Дробные числа

Метод работает не только с целыми, но и с дробными значениями.

console.log(Math.abs(-4.7)); // 4.7
console.log(Math.abs(4.7));  // 4.7

Нюанс с -0

Если передать -0, результатом будет обычный 0.

console.log(Math.abs(-0)); // 0

Технически это уже не -0, а обычный 0.

Проверить можно так:

console.log(Object.is(Math.abs(-0), 0)); // true

Неявное приведение типов

Math.abs() сначала пытается привести аргумент к числу.

console.log(Math.abs("5"));   // 5
console.log(Math.abs("-5"));  // 5
console.log(Math.abs(null));  // 0
console.log(Math.abs(true));  // 1

Из-за этого результат иногда может быть неожиданным, если передавать не числа.

Поэтому на практике обычно лучше передавать в метод уже готовое числовое значение.

NaN и Infinity

Для специальных значений метод ведёт себя предсказуемо.

console.log(Math.abs(NaN));       // NaN
console.log(Math.abs(Infinity));  // Infinity
console.log(Math.abs(-Infinity)); // Infinity

Число не меняется

Math.abs() не изменяет исходное значение. Он только возвращает новый результат.

const value = -15;
const absolute = Math.abs(value);

console.log(value);    // -15
console.log(absolute); // 15

Когда это полезно

Math.abs() удобно использовать, когда:

  • нужно получить расстояние от нуля
  • важна только величина числа, а не знак
  • нужно посчитать разницу между двумя значениями

Пример:

const diff = Math.abs(a - b);

Это очень частый и удобный шаблон.

Math.abs() и Math.sign()

Эти методы решают разные задачи.

console.log(Math.abs(-7));  // 7
console.log(Math.sign(-7)); // -1
  • Math.abs() возвращает величину без знака
  • Math.sign() показывает сам знак числа

Math.abs() и округление

Math.abs() ничего не округляет.

console.log(Math.abs(-4.7)); // 4.7

Если нужно ещё и округление, его делают отдельно:

console.log(Math.round(Math.abs(-4.7))); // 5

Частые ошибки

Думать, что метод округляет число

console.log(Math.abs(-4.7)); // 4.7

Метод убирает знак, но не меняет дробную часть.

Забывать про неявное приведение типов

console.log(Math.abs(null)); // 0
console.log(Math.abs(true)); // 1

Это нормальное поведение JavaScript, но лучше не полагаться на него без необходимости.

Ожидать, что -Infinity останется отрицательным

console.log(Math.abs(-Infinity)); // Infinity

Метод убирает знак и у специальных значений тоже.

Быстрая памятка

  • Math.abs() возвращает модуль числа
  • метод возвращает number
  • отрицательное число становится положительным
  • дробная часть не меняется
  • -0 превращается в 0
  • метод сначала приводит аргумент к числу

Коротко

Math.abs() - это стандартный способ получить модуль числа в JavaScript. Главное, что стоит запомнить: метод не округляет число и не меняет его величину, а просто убирает знак минус, если он есть.