El objeto Math de JavaScript es el cinturón de herramientas silencioso del lenguaje. Nunca lo instancias. Nunca lo importas. Simplemente existe en cada entorno de ejecución, listo para encargarse de todo, desde redondear el valor de un píxel hasta generar el lanzamiento de un dado aleatorio. Debido a que Math es un objeto estático, cada método y propiedad cuelga directamente del espacio de nombres. Escribes Math.PI, no new Math().PI. Esa elección de diseño mantiene las cosas simples, pero también significa que el objeto tiene algunos detalles complejos que vale la pena entender antes de confiar en él para la lógica de producción.
Un objeto estático sin constructor
La mayoría de los objetos integrados de JavaScript quieren que crees una instancia. Llamas a new Date() o new Array(). Math se niega. Está diseñado como un espacio de nombres de funciones y constantes relacionadas que operan sobre el tipo primitivo Number. Llama a Math.sqrt(16) y obtendrás 4. Intenta usar la palabra clave new y el motor lanzará un TypeError. Este patrón mantiene la memoria limpia y señala que Math es puramente funcional. Recibe entradas, devuelve salidas y no muta nada.
Hay una limitación estricta que recordar: Math trabaja con números estándar IEEE 754. No funciona con BigInt. Pasa un BigInt a Math.round() o Math.abs() y obtendrás un TypeError. Si tu aplicación maneja enteros de 64 bits o superiores, necesitas convertir hacia abajo o manejar la aritmética con los operadores nativos de BigInt en su lugar.
Constantes que realmente utilizas
El objeto Math expone varias constantes numéricas que te ahorran tener que escribir números mágicos directamente en el código.
Math.PIes el familiar 3.14159..., esencial para cualquier cosa que involucre círculos, trigonometría o la conversión de grados a radianes.Math.Ees el número de Euler, aproximadamente 2.718. Aparece en curvas de crecimiento exponencial, cálculos de interés compuesto y escalas logarítmicas.Math.SQRT2es la raíz cuadrada de dos, aproximadamente 1.414. Es útil cuando necesitas la diagonal de un cuadrado o quieres normalizar vectores en geometría simple.Math.LN2es el logaritmo natural de 2, aproximadamente 0.693. Verás esto en algoritmos que tratan con árboles binarios, entropía de la información o análisis de complejidad temporal que involucre matemáticas de logaritmo en base 2.
Estos valores son flotantes de doble precisión completa. Debido a que son propiedades y no métodos, accedes a ellos sin paréntesis.
Redondeo, signos y valores absolutos
Las tareas más comunes de Math implican limpiar un número. JavaScript te ofrece cuatro métodos de redondeo, y no se comportan de manera idéntica, especialmente una vez que sales del territorio de los positivos.
Math.abs(x) devuelve la magnitud de un número. Pásale -42 y obtendrás 42. Es útil cuando te importa la distancia en lugar de la dirección. Piensa en comparar marcas de tiempo (timestamps), calcular deltas de arrastre en una interfaz de usuario o comprobar si una suposición está dentro de un margen de error.
Math.round(x) es el redondeador de la escuela primaria. Toma el entero más cercano, redondeando los medios hacia arriba al siguiente entero positivo. Así, 4.4 se convierte en 4, y 4.5 se convierte en 5.
Math.ceil(x) siempre redondea hacia arriba al siguiente entero. 4.1 se convierte en 5, y -4.9 se convierte en -4. Esto último sorprende a la gente. Debido a que -4 es mayor que -4.9 en la recta numérica, el redondeo hacia arriba (ceiling) se mueve hacia el cero para los negativos.
Math.floor(x) es lo opuesto. Siempre redondea hacia abajo. 4.9 se convierte en 4, y -4.1 se convierte en -5. Si estás paginando resultados de búsqueda o asignando bloques de memoria de tamaño fijo, floor es usualmente lo que buscas.
Math.trunc(x) elimina el decimal por completo, dejando solo la parte entera. En efecto, se mueve hacia el cero independientemente del signo. 4.9 se convierte en 4, y -4.9 se convierte en -4. Si estás portando lógica de lenguajes que convierten flotantes a enteros mediante truncamiento, este es tu aliado.
Finalmente, Math.sign(x) te indica en qué lado del cero se encuentra un valor. Devuelve 1 para positivos, -1 para negativos, 0 para el cero positivo, -0 para el cero negativo y NaN para cualquier cosa que no sea un número. Es una forma concisa de ramificar según la dirección sin escribir una cadena de if-else.
Generación de números aleatorios
Math.random() produce un flotante pseudoaleatorio de 0 (inclusive) a 1 (exclusivo). No es criptográficamente seguro, así que no lo uses para la generación de contraseñas, la creación de tokens o cualquier cosa que involucre dinero real.
