1

我试图将一个数字传递给我的 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>

在上面的代码中,如果我将它作为 10040 传递,而不是 01004,我会在警报框中得到正确的值。

对这个奇怪的案例有任何想法吗?

提前致谢。

4

4 回答 4

10

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

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

这无济于事,因为数值 516 被传递给函数。如果你要求 parseInt 给你一个 base 10 的解释,你会得到 516!

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

于 2009-01-12T09:46:56.517 回答
6

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

更新:感谢@Paul Dixon 今天早上让我有些清醒。01004是一个文字,所以没有多少事后解析,即 ,parseInt将更新数字的基数。您需要去掉0代码中的前导以使其成为1004(最简单的解决方案),或者在文字周围加上引号以使其成为字符串,然后再将其发送到parseInt(我看不出有更多的工作)。

于 2009-01-12T09:30:28.187 回答
1

恭喜,您是第 100 万个被八进制文字绊倒的客户,这种语言源自 B(以及 C)的后裔。

你的奖品是在肯·汤普森家外面领导干草叉游行。

于 2009-01-12T11:31:06.230 回答
0

引用数字 -> '01004'

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

EDIT2:好的,感谢 Paul Dixon

于 2009-01-12T09:38:48.013 回答