JavaScript函数参数

JavaScript函数参数,javascript,function,types,parameters,Javascript,Function,Types,Parameters,我试图向JavaScript函数传递一个数字,但实际上传递了一个错误的值。我在这里给出了完整的代码: <html> <head> <script type="text/javascript"> function test(num) { /*It should alert as 01004 or 1004 but to my surprise it's alerting as 516!*/ alert(num); } </script> </h

我试图向JavaScript函数传递一个数字,但实际上传递了一个错误的值。我在这里给出了完整的代码:

<html>
<head>
<script type="text/javascript">
function test(num)
{
/*It should alert as 01004 or 1004 but to my surprise it's alerting as 516!*/
alert(num);
}
</script>
</head>
<body>
<a href="javascript:test(01004);">Test it!</a>
</body>
</html>

功能测试(num)
{
/*它应该作为01004或1004发出警报,但令我惊讶的是,它作为516发出警报*/
警报(num);
}
在上面的代码中,如果我将其作为10040传递,而不是01004,那么我将在警报框中获得正确的值

你知道这个奇怪的案子吗


提前谢谢。

前导零可能会让它认为数字是八进制的


更新:感谢@Paul Dixon今天早上让我的头脑清醒了一些
01004
是一个文本,因此事实解析后的任何数量,即
parseInt
,都不会更新数字的基数。您需要在代码中去掉前导的
0
,使其成为
1004
(最简单的解决方案),或者在文本周围加上引号,使其成为字符串,然后再将其发送到
parseInt
(我看不出有任何原因,这是更复杂的工作)。

前导的零可能使它认为数字是八进制的


更新:感谢@Paul Dixon今天早上让我的头脑清醒了一些
01004
是一个文本,因此事实解析后的任何数量,即
parseInt
,都不会更新数字的基数。您需要在代码中去掉前导的
0
,使其成为
1004
(最简单的解决方案),或者在文本周围加上引号,使其成为字符串,然后再将其发送到
parseInt
(我看不到任何原因,这是一项更大的工作)。

引用数字->01004

编辑:我看到parseInt('01004',10)工作正常。。。我真的不知道为什么parseInt(01004,10)没有


编辑2:好的,多亏了保罗·迪克森(Paul Dixon)

引用这个数字-->'01004'

编辑:我看到parseInt('01004',10)工作正常。。。我真的不知道为什么parseInt(01004,10)没有


EDIT2:好的,多亏了Paul Dixon,以零开头的数字文字被解释为八进制,所以写01004和写516完全一样

其他一些答案建议在函数中使用parseInt将八进制值转换为十进制值

这没有帮助,因为数值516被传递给函数。如果你让parseInt给你一个10进制的解释,你会得到516


解决此问题的方法是丢失前导零,或者如果需要零,将其设置为字符串文字而不是数字,并在函数中使用parseInt(num,10)。

以零开头的数字文字被解释为八进制,因此写入01004与写入516完全相同

其他一些答案建议在函数中使用parseInt将八进制值转换为十进制值

这没有帮助,因为数值516被传递给函数。如果你让parseInt给你一个10进制的解释,你会得到516


解决这一问题的方法是要么丢失前导零,要么如果需要零,将其设置为字符串文字而不是数字,并在函数中使用parseInt(num,10)。

祝贺您,您是第一百万个被从B(以及C)派生的语言中的八进制文字绊倒的客户


您的奖品是在Ken Thompson的房子外领导pitchfork游行。

祝贺您,您是第一百万个被从B(以及C)派生的语言中的八进制文字绊倒的客户



您的奖品是在肯·汤普森家门口领导干草叉游行。

谢谢您的快速回复!我试着在号码上使用parseInt,但在警报框中仍然得到516。我是否应该将01004转换为数字,甚至在我将其传递给JavaScript函数之前!?有趣的是,如果我在
test
的主体中放入一个显式的parseInt(num,10),它仍然是坏的。如果我用引号将01004括起来,例如test('01004'),它就可以工作了。谢谢你的快速回复!我试着在号码上使用parseInt,但在警报框中仍然得到516。我是否应该将01004转换为数字,甚至在我将其传递给JavaScript函数之前!?有趣的是,如果我在
test
的主体中放入一个显式的parseInt(num,10),它仍然是坏的。如果我把01004用引号括起来,例如test('01004'),它就可以工作了。这确实解决了它,但我不知道为什么。这只是因为它不再是一个数字,而是一个字符串。。。从最初的问题开始,我假设需要一个数字。它将数字从以八进制表示的数字文字转换为字符串文字。我假设他想要传递一个字符串:01004不是数字,1004是。是的,但是为什么显式基数为10的parseInt失败了?警报(parseInt(01004,10))->516这确实解决了它,但我不明白为什么。这只是因为它不再是一个数字,而是一个字符串。。。从最初的问题开始,我假设需要一个数字。它将数字从以八进制表示的数字文字转换为字符串文字。我假设他想要传递一个字符串:01004不是数字,1004是。是的,但是为什么显式基数为10的parseInt失败了?警报(parseInt(01004,10))->516您可以将此问题重命名为更具描述性的问题,例如“为什么此JavaScript数值文字计算为意外值?”您可以将此问题重命名为更具描述性的问题,例如“为什么此JavaScript数值文字计算为意外值?”您永远不会忘记您的第一个八进制文字错误:)您永远不要忘记你的第一个八进制文字错误:)