La forma más rápida de construir una calculadora en JavaScript es pasar la expresión escrita a eval. Funciona para 2 + 2, y justo por eso es peligroso: eval no solo calcula, ejecuta cualquier código que reciba.
El problema de eval
Eval ejecuta el texto como un programa con acceso a la página. Una entrada con aspecto de fórmula podría leer cookies, llamar a funciones de red o modificar la página. Si un enlace o un valor compartido puede rellenar la calculadora, un atacante puede convertirla en una inyección de scripts. Incluso con usuarios de confianza, eval acepta una sintaxis que una calculadora debería rechazar, y dificulta probar el código y protegerlo con una política de seguridad de contenido, ya que esta suele prohibir eval por completo.
Qué hace una calculadora segura
En lugar de ejecutar el texto, una calculadora segura lo analiza, es decir, convierte los caracteres en una estructura y calcula ella misma el valor. Solo se pueden usar los operadores, números, constantes y funciones que admites de forma explícita.
Un pequeño analizador de descenso recursivo
Un enfoque habitual es el descenso recursivo, en el que cada nivel de la gramática se convierte en una función.
- Expresión: términos unidos por suma o resta.
- Término: factores unidos por multiplicación o división.
- Potencia: un factor elevado a otra potencia.
- Factor: un número, una constante, una llamada a función con argumentos, una expresión entre paréntesis o un signo negativo.
Cada función consume los caracteres que entiende y llama al siguiente nivel. El orden de las funciones codifica el orden de las operaciones, así que la multiplicación une de forma natural más fuerte que la suma. Todo lo que no encaje en la gramática produce un error de sintaxis claro en lugar de ejecutarse.
Ventajas
- Seguridad: los nombres desconocidos se rechazan, así que no puede ejecutarse nada fuera de la lista.
- Errores claros: puedes decirle al usuario dónde está el fallo.
- Control: tú decides cómo redondear resultados, manejar ángulos y dar formato a números grandes.
- Facilidad de prueba: el analizador es una función pura fácil de probar.
Preguntas frecuentes
¿Qué funciones admite la calculadora? Raíces cuadradas, trigonometría, logaritmos, potencias y constantes comunes. La página las lista en una pista.
¿Este enfoque es solo para calculadoras? La misma idea se aplica siempre que aceptes fórmulas, como en hojas de cálculo y reglas de precios.

