var n=parseInt(Math.random()*(9-0+1)+0);
var input="";
while(true){
input=prompt("你猜");
if(input=="exit"){
console.log("放弃了");
break;
}else if(input<"0"||input>"9"){
console.log("输入的不是一个数字?");
}else if(input>n){
console.log("大了");
}else if(input<n){
console.log("小了");
}else if(input==n){
console.log("猜对了");
break;
}
}
</script>
代码中有这么一段代码
(input<"0"||input>"9"){
console.log("输入的不是一个数字?");
}
如果说这段代码是来判断用户输入的是不是一个数字,那么我在input输入英文,中文,符号使它触发这段代码的操作!我可以理解!
但是我不理解为什么我在input输入902这个数字,也会触发这段代码的操作?
更不理解为什么我换了一个三位数的数字反而不会触发这段代码的操作?
求指点呀?!
字符串比较只比较第一个,所以"102">"9"是不成立的,因为第一位1小于9直接false了,除非你转为数字后对比。。。
改了一下,输入长度小于2就转为数字,还有不能用console.log() 被prompt一直拦着,你看不到,应该用alert
var n=parseInt(Math.random()*(9-0+1)+0);
var input="";
while(true){
input=prompt("你猜");
if(input.length<2){
input=parseInt(input)
}
if(input=="exit"){
alert("放弃了");
break;
}else if(input<0||input>9){
alert("输入的不是一个数字?");
}else if(input>n){
alert("大了");
}else if(input<n){
alert("小了");
}else if(input==n){
alert("猜对了");
break;
}
}
涉及数字的比较最好都转化为number类型,用字符串类型比较容易出错。
输入“902”,这是一个字符串,在和“9”进行比较的时候第一位都是9,就会进行后续的比较,所以结果是字符串"902">"9"
如果输入其他三位数比如“802”,在比较第一个字符的时候,“8”<“9”,所以字符串“802”<“9”
建议像下面这样写
var n=Math.ceil(Math.random()*9); //生成1-9的随机数
var input="";
while(true){
input=parseInt(prompt("你猜"));
//输入0退出
if(input=="0"){
alert("放弃了");
break;
}else if(isNaN(input)){
alert("输入的不是一个数字?");
}else if(input>n){
alert("大了");
}else if(input<n){
alert("小了");
}else if(input==n){
alert("猜对了");
break;
}
}
你这0和9是用双引号的,说明它是字符串啊,你怎么和字符串比较大小啊
用正则判断数字这样就不会错了
因为先判断了||左边的