JavaScript函数参数

Vee*_*era 1 javascript parameters types function

我试图将一个数字传递给我的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>
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,如果我将其作为10040传递,而不是01004,我将在警告框中获取正确的值.

对这个奇怪的案子有什么看法?

提前致谢.

Pau*_*xon 10

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

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

这不会有帮助,因为数值516被传递给函数.如果你要求parseInt给你一个基础10解释,你会得到516!

修复此问题的方法是要么丢失前导零,要么如果需要零,则使其成为字符串文字而不是数字,并在函数内使用parseInt(num,10).


Han*_*Gay 6

领先的零可能使它认为数字是八进制的.

更新:感谢@Paul Dixon今天早上慢慢醒来.01004是一个文字,所以没有任何事后解析,即,parseInt将更新数字的基础.您需要0在代码中删除前导1004(最简单的解决方案),或者在文本周围加上引号以使其成为字符串,然后再发送它parseInt(这是我无法理解的更多工作).