为了账号安全,请及时绑定邮箱和手机立即绑定

关于在js中prompt输入值为0的问题

关于在js中prompt输入值为0的问题

湛瞳 2016-08-09 16:17:22
写了一个在同一个prompt输入框内输入两个数字比较大小的函数,用substring判断字符是否为数字来区分两个数字,代码如下:function bijiao(){  var x = prompt("输入两个数字(请用标点符号间隔)");//x为所有输入的长度  var len = x.length;//输入字符的长度  var str = '';//用来获取输入的数字  var x1 = 0;//每个数字起始下标  var i = 0;//字符下标  var z = 0;//用来判断数字个数  var arr = new Array();//用来承装比较的数字  for (x1; x1 < len;) {   i = x1;//从数字的起始位置开始   for (;x.substring(i, i+1)>0 && x.substring(i, i+1)<=9;i++) {//判断每个字符是否为0-9之间的数字    str = str + x.substring(i, i+1);   }   x1 = i + 1;//重置数字起始下标   if (str != '') {//读数字    document.write('输入的第' + 'z' + '个数字为:' + str + '。<br>');    arr[z] = Number(str);    str = '';    ++z;   }   if (z == 2) {//当两个数字读取完毕之后跳出循环    break;   }  }  if (arr[0] > arr[1]) {   alert("最大值为" + arr[0]);  }else if (arr[0] < arr[1]){   alert("最大值为" + arr[1]);  }else{   alert(arr[0] + "和" + arr[1] + "相等");  } } bijiao();其中有一个有意思的部分,当判断条件为“for (;x.substring(i, i+1)>0 && x.substring(i, i+1)<=9;i++)”时可以正常比较,只是识别不到用户输入的“0”;可是当改成“for (;x.substring(i, i+1)>=0 && x.substring(i, i+1)<=9;i++)”时,所有的浏览器都会刷新很久但出不来结果,怀疑是将“0”识别为“null”,因而导致崩溃,不知是否有大神知道原因
查看完整描述

1 回答

已采纳
?
慕粉3769977

TA贡献16条经验 获得超7个赞

可以先做一个测试: 

var x="";

var t=x.substring(1,2);

alert(t>=0); // true

alert(t>0);//false

在js中空字符串和0是相等的。

所以当你改为>=0时,for (;x.substring(i, i+1)>=0 && x.substring(i, i+1)<=9;i++)一直不会结束。所以这句话应该改为 for (;i<len&& x.substring(i, i+1)>=0 && x.substring(i, i+1)<=9;i++)


查看完整回答
反对 回复 2016-08-10
  • 湛瞳
    湛瞳
    亲,谢谢你,在你的提醒下再加一个判断条件x.substring(i, i+1).length > 0上面的例子就可以运行了,null的长度是读取不到的,而‘0’的长度却可以获取到。thank you
  • 1 回答
  • 0 关注
  • 2253 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信