我的代码出了什么问题?除减法之外的所有东西都有效。它只返回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;
}
答案 0 :(得分:4)
您需要将操作分组在括号中,例如CABasicAnimation
(其他人也一样)。否则,JavaScript首先运行alert("Answer: " + (x - y));
,从而生成一个字符串。
另外,总是为parseInt指定基数(你想要10):"Answer: " + x
,否则一些引擎会与八进制数混淆。
答案 1 :(得分:2)
你的麻烦在这里:
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;
}
答案 2 :(得分:1)
用括号括起你的减法:(x - y)。如果你把x + y放在那里而不是z,你也会从添加中得到意想不到的结果。
发生的事情是运营商优先级。乘法和除法的优先级高于加法,因此它们首先完成 - 在隐式转换为字符串以进行连接之前。
通过减法,' +'和' - '优先级相同,所以按从左到右的顺序完成。因此concat发生在数学之前,这使得你试图从字符串中减去y(这不起作用,所以...... NaN)。
另外,它只是将两个数字连接到字符串上。