Math.log() вычисляет натуральный логарифм числа.
Проще всего запомнить так: Math.log(x) отвечает на вопрос, в какую степень нужно возвести число e, чтобы получить x.
Синтаксис
Math.log(x)
x - число, для которого нужно найти натуральный логарифм.
Что делает Math.log()
Метод возвращает натуральный логарифм, то есть логарифм по основанию e.
console.log(Math.log(1)); // 0
console.log(Math.log(Math.E)); // 1
console.log(Math.log(10)); // 2.302585092994046
Это значит:
Math.log(1)даёт0, потому чтоe^0 = 1Math.log(Math.E)даёт1, потому чтоe^1 = e
Что возвращает Math.log()
Math.log() возвращает число типа number.
const result = Math.log(5);
console.log(result); // 1.6094379124341003
console.log(typeof result); // "number"
Почему Math.log(1) равно 0
Это один из самых важных базовых случаев.
console.log(Math.log(1)); // 0
Потому что любое основание в степени 0 даёт 1, и число e здесь не исключение.
Числа больше 1 и меньше 1
Если число больше 1, логарифм будет положительным.
console.log(Math.log(2)); // 0.6931471805599453
console.log(Math.log(10)); // 2.302585092994046
Если число находится между 0 и 1, логарифм будет отрицательным.
console.log(Math.log(0.5)); // -0.6931471805599453
Это важный момент: отрицательный результат не означает ошибку.
Что происходит с 0
Для нуля результатом будет -Infinity.
console.log(Math.log(0)); // -Infinity
Это логично: чтобы получить число, которое всё ближе к 0, степень у e должна уходить всё дальше в минус.
Отрицательные числа
Вот здесь важный нюанс.
console.log(Math.log(-1)); // NaN
В обычных числах JavaScript натуральный логарифм отрицательного значения не вычисляется, поэтому результатом будет NaN.
Math.log() и Math.exp()
Эти методы связаны друг с другом как обратные операции.
console.log(Math.log(Math.exp(3))); // 3
console.log(Math.exp(Math.log(5))); // 4.999999999999999
Идея здесь такая:
Math.exp(x)делаетe^xMath.log(x)делает обратную операцию
Во втором примере может быть не идеально ровное 5 из-за особенностей хранения дробных чисел в JavaScript.
Math.log() и Math.log10()
Math.log() - это не десятичный логарифм.
console.log(Math.log(100)); // 4.605170185988092
console.log(Math.log10(100)); // 2
Math.log()работает по основаниюeMath.log10()работает по основанию10
Это одна из самых частых путаниц.
Math.log() и Math.log2()
Есть и отдельный метод для основания 2.
console.log(Math.log(8)); // 2.0794415416798357
console.log(Math.log2(8)); // 3
Если нужен логарифм по основанию 2, обычно лучше сразу использовать Math.log2().
Как получить логарифм по своему основанию
Если нужен логарифм не по e, можно использовать формулу смены основания.
const result = Math.log(value) / Math.log(base);
Например, логарифм по основанию 10:
const result = Math.log(1000) / Math.log(10);
console.log(result); // 3
Но если в JavaScript уже есть специальный метод вроде Math.log10() или Math.log2(), обычно он читается понятнее.
Без аргумента
Если вызвать Math.log() без аргумента, результатом будет NaN.
console.log(Math.log()); // NaN
Так происходит потому, что метод попытается обработать undefined как число.
Неявное приведение типов
Math.log() сначала пытается привести аргумент к числу.
console.log(Math.log("10")); // 2.302585092994046
console.log(Math.log(true)); // 0
console.log(Math.log(null)); // -Infinity
console.log(Math.log(undefined)); // NaN
На практике обычно лучше передавать в метод уже готовое число.
NaN и Infinity
Для специальных значений метод ведёт себя предсказуемо.
console.log(Math.log(NaN)); // NaN
console.log(Math.log(Infinity)); // Infinity
console.log(Math.log(-Infinity)); // NaN
Это удобно помнить:
InfinityдаётInfinity-InfinityдаётNaN
Число не меняется
Math.log() не изменяет исходное значение. Он только возвращает новый результат.
const value = 10;
const result = Math.log(value);
console.log(value); // 10
console.log(result); // 2.302585092994046
Когда это полезно
Math.log() удобно использовать, когда:
- нужен натуральный логарифм
- вы работаете с формулами роста, спада и вероятностей
- нужно сделать обратную операцию к
Math.exp() - нужно перевести значение в логарифмическую шкалу
Пример:
const value = Math.exp(2);
console.log(Math.log(value)); // 2
Частые ошибки
Думать, что Math.log() считает логарифм по основанию 10
console.log(Math.log(100)); // 4.605170185988092
console.log(Math.log10(100)); // 2
Math.log() - это натуральный логарифм, а не десятичный.
Ожидать NaN для нуля
console.log(Math.log(0)); // -Infinity
Для нуля метод возвращает именно -Infinity, а не NaN.
Ожидать обычное число для отрицательного аргумента
console.log(Math.log(-5)); // NaN
Для отрицательных значений натуральный логарифм в обычных числах JavaScript не вычисляется.
Быстрая памятка
Math.log(x)вычисляет натуральный логарифм- метод возвращает
number - основание здесь равно
e Math.log(1)равно0- для чисел между
0и1результат отрицательный Math.log(0)даёт-Infinity- для отрицательных чисел результатом будет
NaN Math.exp()делает обратную операцию
Коротко
Math.log() - это стандартный способ вычислить натуральный логарифм в JavaScript. Главное, что стоит запомнить: метод работает по основанию e, для 0 возвращает -Infinity, а для отрицательных значений даёт NaN.