2013-09-28 4 views
1

В настоящее время Javascript вычитает 2 из аргументов, переданных на моем сайте.Прошедшие аргументы Javascript меньше, чем вызванные

Например, если я вызываю свою функцию как myFunction(123, 012), а затем регистрирую значения аргументов в функции, они выходят как 123 и 10. Почему Javascript вычитает 2 из моих целых значений, где есть начальный нуль ?

Моя функция:

function myFunction(arg1, arg2){ 
    console.log("Argument One: " + arg1 + ". Argument Two: " + arg2); 
} 
+1

* где есть ведущий ноль *, где ваша функция js :) – Sachin

+3

Octal vs decimal. – elclanrs

+0

Возможно, было бы неплохо показать функцию – y0ruba

ответ

4

Это не вычитая 2. 012 - это восьмеричное представление, значение которого равно 10.

+0

Итак, как мне заставить ее не использовать восьмеричную, а просто '012'? –

+2

Преобразование аргумента в строку. –

1

В Javascript перед тем EMCA-262 Выпуск 3, целочисленные литералы могут быть нескольких типов (см https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Values,_variables,_and_literals):

  • Нет лидирующего нуля: Интерпретированный в виде десятичных буквального (12 = 12 в десятичной системе)
  • Leading нуль: восьмеричная интерпретация (012 = 10 в десятичной системе)
  • Ведущего 0x: шестнадцатеричная (0x12 = 18 в десятичной системе)

Однако в эти дни восьмеричные литералы устарели (с Javascript 1.5), именно по той причине, что показано здесь, что они очень запутывают.

В качестве примечания стороны стоит включить strict mode (добавьте «использовать строгую», с кавычками, до остановки вашего кода). Если бы вы загрузили страницу с этим кодом, она бы выбросила синтаксическую ошибку.

Смежные вопросы