Javascript 减法 returns NaN

Javascript subtraction returns NaN

我的代码有什么问题??除了减法之外的一切都有效。它只是 returns NaN。我是 javascript 的新手,所以我的代码可能写得不好。

// Variables
var count = prompt("Choose an arithmetic method: \n1. Addition \n2.     Subtraktion\n3. Multiplikation\n4. Division");
var x = parseInt(prompt("Enter your first number", "0"));
var y = parseInt(prompt("Enter your second number", "0"));
var z = +x + +y;


// Switch function with 4 cases
switch(count) {
case '1':
alert("Answer: " + z);
break;

case '2':
alert("Answer: " + x - y);
break;

case '3':
alert("Answer: " + x * y);
break;

case '4':
alert("Answer: " + x / y);
break;

}

您需要将操作分组在括号中,例如 alert("Answer: " + (x - y));(其他操作也一样)。否则 JavaScript 首先运行 "Answer: " + x,产生一个字符串。

此外,始终为 parseInt 指定基数(您需要 10):parseInt(input, 10),否则某些引擎会与八进制数混淆。

你的麻烦在这里:

alert("Answer: " + x - y);

由于运算符关联的工作方式,它的工作方式就像您这样写:

alert(("Answer: " + x) - y);

你需要这样写:

alert("Answer: " + (x - y));

这里的片段:

// Variables
var count = prompt("Choose an arithmetic method: \n1. Addition \n2.     Subtraktion\n3. Multiplikation\n4. Division");
var x = parseInt(prompt("Enter your first number", "0"));
var y = parseInt(prompt("Enter your second number", "0"));
var z = +x + +y;


// Switch function with 4 cases
switch (count) {
  case '1':
    alert("Answer: " + z);
    break;

  case '2':
    alert("Answer: " + (x - y));
    break;

  case '3':
    alert("Answer: " + x * y);
    break;

  case '4':
    alert("Answer: " + x / y);
    break;
}

将减法括在括号中:(x - y)。如果你把 x + y 放在那里而不是 z,你也会从加法中得到意想不到的结果。

发生的是运算符优先级。乘法和除法的优先级高于加法,因此它们先完成 - 在隐式转换为字符串以进行连接之前。

对于减法,“+”和“-”的优先级相同,因此按从左到右的顺序进行。所以 concat 发生在数学之前,这让你试图从字符串中减去 y (这不起作用,所以...... NaN)。

加上,它会简单地将两个数字连接到字符串上。