J'ai essayé d'obtenir des nombres par prompt (), ainsi que par le nom de l'action. Mais le résultat n'est pas comme prévu
Je suis nouveau dans la programmation .. code:
function add(n1, n2){ return n1 + n2;} function sub(n1, n2){ return n1 - n2;} function mult(n1, n2){ return n1 * n2;} function div(n1, n2){ return n1/n2;} function calculator(n1, n2, action){ alert(action(n1, n2)); } calculator(prompt("first no,"), prompt("second No"), prompt("calc"));
3 Réponses :
Deux choses à faire:
function add(n1, n2) { return n1 + n2; } function sub(n1, n2) { return n1 - n2; } function mult(n1, n2) { return n1 * n2; } function div(n1, n2) { return n1 / n2; } function calculator(n1, n2, action) { alert(action(n1, n2)); } function findOperation(name) { switch (name) { case "sub": return sub; case "mult": return mult; case "div": return div; case "add": default: return add; } } calculator( parseFloat(prompt("first no,")), parseFloat(prompt("second No")), findOperation(prompt("Operation Name?")) );
la fonction de calcul doit être:
function calculator(n1, n2, action){ alert(eval(action+'('+n1+', '+n2+')')); }
Je vous suggère de prendre le temps d'apprendre quelques bases, vous ne pouvez pas convertir une chaîne en un appel de fonction à moins d'utiliser eval () comme ceci:
const ops = { "add": (n1, n2) => n1 + n2, "sub": (n1, n2) => n1 - n2, "mult": (n1, n2) => n1 * n2, "div": (n1, n2) => n1/n2 } function calculator(n1, n2, action){ alert(ops[action](parseFloat(n1), parseFloat(n2))); } calculator(prompt("first no,"), prompt("second No"), prompt("calc"));
Mais c'est vraiment piraté et code non sécurisé, une meilleure approche serait:
function add(n1, n2){ return n1 + n2;} function sub(n1, n2){ return n1 - n2;} function mult(n1, n2){ return n1 * n2;} function div(n1, n2){ return n1/n2;} function calculator(n1, n2, action){ alert(eval(`${action}(${n1}, ${n2})`)); } calculator(prompt("first no,"), prompt("second No"), prompt("calc"));
Notez également le parseFloat (), si vous conservez les paramètres sous forme de chaînes, vous obtiendrez:
entrée: "1", "2", "ajouter" sortie: "12"
Comment poser une bonne question? , Comment mettre en forme mes articles en utilisant Markdown ou HTML?
action
doit être une fonction mais vous lui passez une chaîne (que le navigateur vous indiquera dans la console:TypeError: l'action n'est pas une fonction
)Plutôt que de faire cela, vous pouvez créer un objet ayant ces méthodes et appeler les méthodes.
où dois-je modifier ce code pour qu'il fonctionne comme prévu?