所以我使用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);
}
答案 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}}
答案 1 :(得分:2)
这是因为运营商的优先顺序。 JavaScript解释器尝试连接字符串和第一个数字,而不是添加两个数字,然后将结果连接到字符串。
要缓解,您需要指示JavaScript在字符串连接之前执行加/减。括号可以帮助您这样做:
Location
由于乘法和除法对字符串连接具有更高的优先级,因此在那里没有观察到相同的行为。