Javascript parseInt出了什么问题

Javascript parseInt出了什么问题,javascript,jquery,Javascript,Jquery,我在parseInt上遇到了一个问题 我确实将这个parseInt应用于我的所有项目,但今天我遇到了这个问题 我有一个正常的文本输入 我使用jquery检索输入值,然后写入另一个输入 下面是我的jquery代码 $(":input[name='KG']").keyup(calc); function calc(){ var kg = $(":input[name='KG']").val(); kg=parseInt(kg); $(":input[name='KG2']").v

我在parseInt上遇到了一个问题 我确实将这个parseInt应用于我的所有项目,但今天我遇到了这个问题

我有一个正常的文本输入
我使用jquery检索输入值,然后写入另一个输入

下面是我的jquery代码

$(":input[name='KG']").keyup(calc);
function calc(){
   var kg = $(":input[name='KG']").val();
   kg=parseInt(kg);
   $(":input[name='KG2']").val(kg);
}
猜猜看,这就是我得到的结果
input@KG > show@KG2
28>28
028>2
34>34
034>28
9>9
09>0


有人知道出了什么问题吗?它可以通过使用Math.round来解决。

您忘记了第二个参数,该参数指定解释整数的基数。要修复您的示例,请尝试以下操作:

$(":input[name='KG']").keyup(calc);
function calc(){
   var kg = $(":input[name='KG']").val();
   kg=parseInt(kg, 10);
   $(":input[name='KG2']").val(kg);
}
将代码更改为

kg=parseInt(kg, 10);
必须将基数(第2个参数)传递给
parseInt()
,否则它将根据内容进行猜测。“猜测”逻辑全部被描述

在您的情况下,如果字符串以
0
开头,而不是以
0x
开头,它将假定该字符串为八进制,仅将0-8作为法定字符,并以8为基数进行转换


故事的寓意——始终将基数值传递给
parseInt()

028
034
09
被视为八进制数,因为它们以
0
开头,并且您没有指定基数
8和
9是无效数字,因此第一个和最后一个数字分别为
2和
0,第二个数字转换为十进制数
3*8+4=28


使用
parseInt(kg,10)

请注意,这种行为在ES5()中已过时。无论如何,在其他方面与ES5兼容的浏览器仍然使用前导零进行八进制操作,因此在一段时间内仍然需要基数。