Weniger provokant gefragt: wie hast Du - basierend auf dem ausgewählten Operator - das erwartete Ergebnis berechnet, wenn nicht mit eval()?
Wie ich geschrieben habe. Zb so: if(operator == 'plus'){ x = a + b }
dann wäre nur noch zu vergleichen ob der Anwender für x dasselbe rausgekriegt und als seine Lösung eingegeben hat. Die Kontrollstruktur auf die anderen Operatoren zu erweitern ist ja kein Problem und übersichtlich bleibt das auch.
Problematisch könnte es bei einer Division werden, da muss es eine Vereinbarung geben bezüglich der Genauigkeit (Anzahl der Nachkommastellen).