Search code examples
javascriptfunctionprompt

In Javascript, simple calculator, not working


I tried to get numbers by prompt(), and also action name. But the result is not as expected

i am new to programming.. 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"));

Solution

  • I suggest you take time to learn some basics, you can't convert a string to a function call unless you use eval() like this:

    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"));
    

    But this is really hacky and unsafe code, a better approach would be:

    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"));
    

    Also notice the parseFloat(), if you keep the parameters as strings you will get:

    input: "1", "2", "add" output: "12"