我有一个非常愚蠢的问题。这段代码:

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 elementvalue属性是一个字符串,因此您的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与您的计算相同,则问题就不会出现。

10-07 16:36