Сравнение ввода пользователя с числом с ведущим нулем

Рассмотрим следующий код:

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";

Ведущий 0 означает восьмеричное в JavaScript.

Если вы не хотите восьмеричный, то сделайте это строкой

var a = '011';

После ввода 011 вы получите "Готово".

0 => Это означает восьмеричное, поэтому вы получаете предупреждение ложным;

var a = 011;

ans = prompt("enter password","");

if (a==ans){
  alert("done");
 }else{
  alert("false")
}

var a = "011" предупредит done;

Из документации:

  1. Если входная строка начинается с "0x" или "0X", основание будет 16 (шестнадцатеричное).
  2. Если входная строка начинается с "0", основание равно восьми (восьмеричное). Эта функция является нестандартной, и некоторые реализации намеренно не поддерживают ее (вместо этого используется основание 10). По этой причине всегда указывайте основание при использовании parseInt.
  3. Если входная строка начинается с любого другого значения, основание будет 10 (десятичное).
  4. Если первый символ не может быть преобразован в число, parseInt возвращает NaN.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/parseInt

Другие вопросы по тегам