考虑以下代码:
var a = 011;
ans = prompt("enter password", "");
if (a == ans) {
alert("done");
} else {
alert("false");
}
为什么console.log(a)
输出 9?
我应该在提示中输入什么作为密码才能alert("done");
调用?
考虑以下代码:
var a = 011;
ans = prompt("enter password", "");
if (a == ans) {
alert("done");
} else {
alert("false");
}
为什么console.log(a)
输出 9?
我应该在提示中输入什么作为密码才能alert("done");
调用?
你会得到相同的结果parseInt("011", 8)
。那是以 a 开头的整数文字0
被视为octal
(请参阅整数文字的 MDN)。
删除0
,你会没事的。
如果你想要的是一个字符串,这里是正确的文字:
var a = "011";
JavaScript 中的前导0
表示八进制。
如果您不想要八进制,则将其设为字符串
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