Сравнение ввода пользователя с числом с ведущим нулем
Рассмотрим следующий код:
var a = 011;
ans = prompt("enter password", "");
if (a == ans) {
alert("done");
} else {
alert("false");
}
Почему console.log(a)
выходы 9?
Что я должен ввести в качестве пароля в командной строке, чтобы иметь alert("done");
называется?
4 ответа
Решение
Вы получите тот же результат с parseInt("011", 8)
, Это целочисленный литерал, начинающийся с 0
рассматривается как octal
(см. MDN о целочисленных литералах).
Удалить 0
и у тебя все будет хорошо.
Если то, что вы хотите, это строка, вот правильный литерал:
var a = "011";
Если вы не хотите восьмеричный, то сделайте это строкой
var a = '011';
После ввода 011 вы получите "Готово".
0 =>
Это означает восьмеричное, поэтому вы получаете предупреждение ложным;
var a = 011;
ans = prompt("enter password","");
if (a==ans){
alert("done");
}else{
alert("false")
}
var a = "011"
предупредит done
;
Из документации:
- Если входная строка начинается с "0x" или "0X", основание будет 16 (шестнадцатеричное).
- Если входная строка начинается с "0", основание равно восьми (восьмеричное). Эта функция является нестандартной, и некоторые реализации намеренно не поддерживают ее (вместо этого используется основание 10). По этой причине всегда указывайте основание при использовании parseInt.
- Если входная строка начинается с любого другого значения, основание будет 10 (десятичное).
- Если первый символ не может быть преобразован в число, parseInt возвращает NaN.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt