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?
actiondoit ê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?