0

考虑以下代码:

var a = 011;

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

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

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

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

4

4 回答 4

4

你会得到相同的结果parseInt("011", 8)。那是以 a 开头的整数文字0被视为octal(请参阅整数文字的 MDN)。

删除0,你会没事的。

如果你想要的是一个字符串,这里是正确的文字:

var a = "011";
于 2016-01-11T13:03:10.450 回答
3

JavaScript 中的前导0表示八进制。

于 2016-01-11T13:02:56.210 回答
1

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

var a = '011';

输入 011 将给你“完成”

于 2016-01-11T13:04:29.680 回答
1

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

于 2016-01-11T13:05:31.183 回答