javascript - JavaScript if 语句故障
问题描述
所以我必须编写代码,在用户提供的区间内将所有自然数相乘。
该代码包含一个 a > b 的测试,但它只在 b >= 10 之前有效。例如,如果 (a == 8) 和 (b == 9),则该语句正常工作,但只要 (a = = 8) 和 (b >= 10),它会显示警报“数字 a 必须小于数字 b”(即使 8 明显小于 10)。
如果输入 (a == 10) 和 (b == 8) then 语句会执行,即使它显然不应该执行。
我希望有人可以帮助我找到代码中的错误。
在代码中有一些我的母语文本,但我已将大部分内容翻译成英文,因此理解它应该没有问题。
<!DOCTYPE html>
<html>
<head>
<title>Intervala reizinajums</title>
</head>
<body>
<form id="myForm">
<label for="int_a">Ievadi a: </label>
<input type="number" name="int_a" id="a" style="width: 30px">
<br>
<br>
<label for="int_b">Ievadi b: </label>
<input type="number" name="int_b" id="b" style="width: 30px">
<br>
<button type="submit" onclick=" return reizinajums()">OK</button>
<p id="para"></p>
</form>
<script type="text/javascript">
function reizinajums() {
var a = document.forms['myForm']['a'].value; //2
var b = document.forms['myForm']['b'].value; //4
var reiz = 1;
if (a<=0 && b<=0) {alert ('This interval doesn`t content any natural numbers');
return false;}
if (a>b) {
alert ('Number a has to be less than number b');
return false;
}
else { //(if a < b) Finds all natural numbers in interval and multiplies them
while(a<=b){
if (a<=0) {a=1;}
reiz = reiz * a;
a ++;
}
document.getElementById('para').innerHTML= 'Intervala '+document.forms['myForm']['a'].value+' - '+document.forms['myForm']['b'].value+' naturalo skaitlu reizinajums ir ' + reiz;
return false;
}
}
</script>
</body>
</html>
解决方案
原因
"10" > "8" // false
字符串是按词法比较的,因此每个字符都从左到右进行比较,直到出现第一个差异。在这种情况下,它带有“1”和“8”,并且 8 大于 1。您可能希望将字符串解析为数字:
var a = parseInt(/*stuff*/.value, 10);
推荐阅读
- javascript - 更改 obj 子元素的颜色或位置
- jquery-ui - 拖放,可克隆和可移除
- reactjs - 在 Froala 所见即所得编辑器中为 React 调用方法
- android - Android Studio 3.1 - kotlin 插件不起作用
- ruby - 通过管道脚本在 jenkins 中安装 fastlane 插件
- android - layout_alignRight 无法正常工作
- google-cloud-firestore - Firestore 中的最佳关系数据模型
- r - R - 使用 nnetar 进行预测时的预测区间变窄
- css - 如何使 td 在没有 colspan 的情况下填充表格中的所有行
- blueprism - 按列名称过滤容器