我有一个非常愚蠢的问题。这段代码:
var x=5;
console.log(x*20+x-1);
按预期打印104,但这是:
function Go(){
x = document.getElementById("input").value;
console.log(x);
console.log(x*20+x-1);
}
打印出5,然后打印1004。为什么?
console.log(x*20)
打印100。我尝试将其放在方括号中,然后添加(x-1)
,但仍输出1004。 最佳答案
input element的value
属性是一个字符串,因此您的x
实际上是"5"
,而不是数字5
。接下来是JavaScript进行算术隐式类型转换的方法:
"5" * 20 + "5" - 1
= 100 + "5" - 1
= "1005" - 1
= 1004
因此,第一步中,将
"5"
正确转换为数字5
,保留100
作为中间结果。但是,在数字中添加字符串会将数字转换为字符串,因此接下来发生的是将字符串连接为"1005"
。最后,从字符串中减去数字1
,这会导致字符串再次转换为数字,从而产生最终结果:1004
。为了避免这种情况,您可以简单地先将
x
转换为数字:var x = document.getElementById("input").value;
x = parseInt(x, 10); // or parseFloat(x) if you’re interested in a decimals
console.log(x * 20 + x - 1);
有趣的事实:如果您写的
x * 21 - 1
与您的计算相同,则问题就不会出现。