为什么我的加法和减法不起作用?

时间:2018-04-27 04:50:26

标签: javascript function if-statement readline

所以我使用readline-sync来执行基本计算。乘法和除法工作正常,但当我添加两个数字时,它只是连接它们,当我减去它时返回NaN。

知道我做错了吗?

这是我的代码:

var readlineSync = require("readline-sync");

var enterNum1 = readlineSync.question("Please enter your first number: ");
var enterNum2 = readlineSync.question("Please enter your second number: ");
var operations = ["add", "sub", "mul", "div"];
var selectOperation = readlineSync.keyInSelect(operations, "What operation will you like to perform?");


function addNum(num1, num2){
    console.log("The result is : " + Number(num1) + Number(num2));
}

function subNum(num1, num2){
    console.log("The result is : " + Number(num1) - Number(num2));
}

function mulNum(num1, num2){
    console.log( "The result is : " + Number(num1) * Number(num2));
}

function divNum(num1, num2){
    console.log("The result is : " + Number(num1) / Number(num2));
}

if(selectOperation === 0){
    addNum(enterNum1, enterNum2);
}else if(selectOperation === 1){
    subNum(enterNum1, enterNum2)
}else if(selectOperation === 2){
    mulNum(enterNum1, enterNum2);
}else {
    divNum(enterNum1, enterNum2);
}

2 个答案:

答案 0 :(得分:4)

将您的操作包装在括号中

e.g。

console.log("The result is : " + (Number(num1) + Number(num2)));
console.log("The result is : " + (Number(num1) - Number(num2)));

<强>推理

根据运算符优先级,乘法和除法起作用,因为它们具有更高的优先级,即它们将首先执行。在加法和减法的情况下,优先级相同并且从左到右操作。因此,首先将字符串"The result is : "添加到Number(num1),然后添加到Number(num2),这会导致连接和减法,它会尝试从字符串中减去一个数字,从而导致{ {1}}

供参考,Operator precedence

答案 1 :(得分:2)

这是因为运营商的优先顺序。 JavaScript解释器尝试连接字符串和第一个数字,而不是添加两个数字,然后将结果连接到字符串。

要缓解,您需要指示JavaScript在字符串连接之前执行加/减。括号可以帮助您这样做:

Location

由于乘法和除法对字符串连接具有更高的优先级,因此在那里没有观察到相同的行为。