Параметр функции JavaScript - PullRequest
       15

Параметр функции JavaScript

1 голос
/ 12 января 2009

Я пытаюсь передать число моей функции 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>

В приведенном выше коде вместо 01004, если я передаю его как 10040, я получаю правильное значение в окне предупреждения.

Есть идеи об этом странном случае?

Заранее спасибо.

Ответы [ 4 ]

10 голосов
/ 12 января 2009

Числовой литерал, который начинается с нуля, интерпретируется как восьмеричное, поэтому запись 01004 равна точно так же, как запись 516.

Некоторые другие ответы, предлагающие использовать parseInt внутри функции для преобразования восьмеричного значения в десятичное.

Это не поможет, поскольку числовое значение 516 передается функции. Если вы попросите parseInt предоставить вам базовую 10-ю интерпретацию, вы получите 516!

Способ исправить это - либо потерять начальный ноль, либо, если требуется ноль, сделать его строковым литералом, а не числом, и использовать parseInt (num, 10) внутри функции.

6 голосов
/ 12 января 2009

Ведущий ноль, вероятно, заставляет думать, что число восьмеричное.

ОБНОВЛЕНИЕ: Спасибо @Paul Dixon за пробежку по утрам. 01004 является литералом, поэтому никакое количество повторных разборов, т. Е. parseInt, не будет обновлять основание числа. Вам нужно либо убрать ведущий 0 в вашем коде, чтобы сделать его 1004 (самое простое решение), либо поместить кавычки вокруг литерала, чтобы сделать его строкой, прежде чем отправить его в parseInt (что больше не работает Я вижу причину).

1 голос
/ 12 января 2009

Поздравляем, вы - один миллионный клиент, которого запутали восьмеричные литералы на языке, происходящем от B (и, следовательно, C).

Ваш приз - провести парад вил у дома Кена Томпсона.

0 голосов
/ 12 января 2009

Цитировать номер -> '01004'

РЕДАКТИРОВАТЬ: я вижу parseInt ('01004', 10) работает нормально ... Я действительно не знаю, почему parseInt (01004, 10) не

EDIT2: Хорошо, спасибо Полу Диксону

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...