将用户输入与带前导零的数字进行比较

Comparing user input to a number with leading zero

考虑以下代码:

var a = 011;

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

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

为什么console.log(a)输出9?

我应该在提示中输入什么作为密码才能呼叫 alert("done");

开头的0表示JavaScript中的八进制。

你会得到与 parseInt("011", 8) 相同的结果。那是以 0 开头的整数文字被视为 octal(参见 the MDN on integer literals)。

删除 0 就可以了。

如果您想要的是字符串,这是正确的文字:

var a = "011";

如果您不需要八进制,则将其设为字符串

var a = '011';

输入 011 会给你 'Done'

0 => 这意味着八进制,所以这就是为什么您收到错误警报;

var a = 011;

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

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

var a = "011" 将发出警报 done;

来自文档:

  1. If the input string begins with "0x" or "0X", radix is 16 (hexadecimal).
  2. If the input string begins with "0", radix is eight (octal). This feature is non-standard, and some implementations deliberately do not support it (instead using the radix 10). For this reason always specify a radix when using parseInt.
  3. If the input string begins with any other value, the radix is 10 (decimal).
  4. If the first character cannot be converted to a number, parseInt returns NaN.

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