Artículo de consulta · Programación
Valores aleatorios en JavaScript
JavaScript ofrece distintas formas de obtener valores aleatorios. La elección depende del uso que tendrá el resultado.
Math.random()
Math.random() devuelve un número pseudoaleatorio mayor o igual que cero y menor que uno. Sirve para simulaciones sencillas o efectos visuales, pero no es criptográficamente seguro. No lo uses para tokens de sesión, códigos de recuperación ni decisiones que requieran resistencia frente a un atacante.
Enteros en un intervalo
Para elegir un entero entre cero y un límite exclusivo, multiplica por ese límite y aplica Math.floor. El ejemplo elige una posición de un array no vacío. Math.round no es equivalente: daría intervalos de distinto tamaño para los valores de los extremos.
const opciones = ["HTML", "CSS", "JavaScript"]; const indice = Math.floor(Math.random() * opciones.length); console.log(opciones[indice]);
Web Crypto
crypto.getRandomValues() llena un arreglo de enteros con valores criptográficamente seguros. A diferencia de randomUUID(), puede usarse también en un contexto no seguro.
Ejemplo
La llamada modifica el arreglo recibido. Este ejemplo obtiene cuatro enteros de 32 bits; no constituye por sí solo un generador de contraseñas.
const values = new Uint32Array(4); crypto.getRandomValues(values);
Distribución y sesgo
Un número seguro no garantiza que cualquier transformación preserve una distribución uniforme. Aplicar el operador % a un rango que no divide exactamente el rango de origen puede introducir sesgo. Para sorteos o protocolos sensibles, utiliza un procedimiento revisado que cubra generación, selección y verificación.
Qué comprobar
- Ejecuta la selección varias veces: el resultado debe pertenecer a la lista.
- Comprueba que el límite superior sea exclusivo y contempla una lista vacía antes de seleccionar.
- No esperes el mismo resultado en cada ejecución ni confundas una muestra pequeña con una prueba de calidad estadística.
Referencias
Artículos relacionados
- Fundamentos: variables, condiciones y bucles
- HTML semántico y estructura de una página
- CSS: modelo de caja, Flexbox y Grid
- JavaScript: funciones, parámetros y alcance
- JavaScript: arrays, objetos y transformación de datos
- DOM y eventos: conectar JavaScript con HTML
- Promesas, async/await y peticiones con fetch
- HTTP y APIs web: peticiones, respuestas y estados
- JSON: formato, lectura y validación de datos
- Git: cambios, commits, ramas y repositorios remotos
- Node.js y npm: scripts y dependencias de un proyecto
- Depuración y pruebas: encontrar y comprobar errores
- Formatos de color: HEX, RGB y HSL
- Identificadores UUID
