Javascript警报号码从0开始

时间:2012-10-15 01:05:39

标签: javascript

我有一个按钮,在后面的代码中我添加onclick并传递一个唯一的ID,该ID将被传递给js函数。 id以0开头。

它没有用,最终我发现数字,身份证,传递是错误的......

IE中。看到这个:js fiddle

它适用于数字的开头和结尾。只是想知道为什么013转到11.我做了一些谷歌搜索,找不到任何东西......

干杯

罗宾

编辑:

谢谢你们。是的,现在明白了。

在这种情况下,开头的0有意义,这里是邮件列表中的收件人ID,我将使用'013'而不是仅使用013,即字符串。然后,我可以将值分成js,因为3个值中的每一个代表一个不同的id,它总是只有1个字符长,即0-9。

4 个答案:

答案 0 :(得分:8)

0开头的数字文字被视为八进制数。因此基数8中的13是基数10中的11 ...

八位数字文字已被弃用,但如果您没有处于严格模式,则仍然有效。

(你没有问,但是)以0x开头的数字文字被视为十六进制。

MDN的更多信息。

在您的演示中,该参数被称为id,这意味着您不需要对其进行数值运算 - 如果是这样,只需将其放在引号中并将其用作字符串。

如果你需要能够传递前导零但是仍然将数字视为基数10来对其进行数值运算,则可以将其括在引号中以将其作为字符串传递,然后将字符串转换为数字一种强迫基础10的方式,例如:

something('013');

function something(id){    
    alert(+id);             // use unary plus operator to convert
    // OR
    alert(parseInt(id,10)); // use parseInt() to convert        
}

演示:http://jsfiddle.net/XYa6U/5/

答案 1 :(得分:2)

013是八进制,不是十进制,十进制等于11

答案 2 :(得分:0)

您应该注意0130开头。在Javascript中,这会导致数字被视为八进制。通常,您将要使用十进制和十六进制数字系统。有时候,八进制数很有用,如this question shows.

我希望这有帮助! :)

答案 3 :(得分:0)

如果数字的第一个数字为零,则parseInt将该数字解释为八进制。

您可以像这样指定十个基数:

parseInt(numberString, 10)

你也可以用这样的正则表达式删除这样的零(结果将是一个字符串):

numberString.replace(/^0+/g, '');