2013-06-14 3 views
4

Javascript ведет себя по-разному со значениями, имеющими ведущие нули. alert (b) - печатает другое значение.Javascript переменная с ведущими нулями

var a = 67116; 
var b = 00015; 
alert(a); 
alert(b); 

Мне больше всего интересно узнать, какое преобразование применяется здесь при помощи javascript внутри предупреждения (b)? (если я их в двойных кавычках. Они работают хорошо.)

+0

Да, что, черт возьми, здесь происходит: HTTP : //jsfiddle.net/watson/4qsvQ/ – dezman

+0

Если они находятся в кавычках, это строка и будет прочитана буквально. – dezman

+0

@ Kris, ваш ник тот же самый из моего exgf, сейчас я в депрессии:/... это странно? – Jonathan

ответ

3

Поскольку JS слабо типизированный он считает

var b = 00015 

является восьмеричным числом

см this question для решения

+0

http://www.translatorscafe.com/cafe/units-converter/numbers/calculator/octal-to-decimal/ – Kris

3

ведущий 0 делает значение восьмеричным литералом, поэтому значение, которое вы положили, будет интерпретироваться как целое число базы 8.

Иными словами, 015 будет эквивалентен parseInt('15', 8).

1

Как сказано в других ответах, ведущие нули делают число восьмеричным литералом. Десятичное представление восьмеричного «15» - «13».

Обратите внимание, что нет оснований использовать ведущие нули в числовых литералах, если вы действительно не хотите, чтобы их интерпретировали как восьмеричные. Я имею в виду, не используйте var b = 00015. Если вы получаете это значение из пользовательского ввода, то это будет строка (т.е. "00015"), и вы можете преобразовать в десятичное число с parseInt:

var b = "00015"; // or var b = document.getElementById('some_input').value 
var numB = parseInt(b, 10); // 15