具有两个条件的 while 循环仅检查一个

While loop with two conditions only checks one

本文关键字:循环 检查 一个 while 条件 两个      更新时间:2023-09-26

我有一个while循环,旨在检查一个数字是否是一个数字,或者它是一个50或更低。目前,它仅在 51 或更多时运行循环;如果是NaN,则不会!澄清一下,当midday高于 50 或 NaN 时,它需要保持在循环中。

var midday = prompt("Enter midday temperature for day " + pn);
midday = parseFloat(midday);
while (Number.isNaN(midday) === false || midday > 50) {
   //validate that the number is w/n an expected range. 
   //No minimum value as not expecting excessivly low input 
   alert("You entered a out out range or incorrect number")
   var midday = prompt("Enter midday temperature for day " + pn);
   midday = parseFloat(midday);
}; 

我将 while 条件从 Number.isNaN(midday) === false || midday > 50 更改为 Number.isNaN(midday) || midday > 50

如果中午是一个数字,则测试Number.isNaN(midday) === false || midday > 50将返回 true。这意味着所有数字都将通过此条件。

您要做的是检查中午是否不是一个数字,或者它是否大于 50

var midday = prompt("Enter midday temperature for day ");
midday = parseFloat(midday);
while (Number.isNaN(midday) || midday > 50) {
//validate that the number is w/n an expected range. No minimum value as not expecting excessivly low input 
alert("You entered a out out range or incorrect number")
var midday = prompt("Enter midday temperature for day ");
midday = parseFloat(midday);
};

尝试使用 this 而不是 Number.isNaN():

typeof(midday) === 'number'

isNaN() 不检查 var 是否是一个数字,它会检查 var 是否可以转换为不是 NaN 的数字,所以,如果你最终得到这样的场景:

isNaN('')

你会得到"不是 NaN,破坏你的代码......

更多详情: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isNaN

isNaN() 已经检查它是否不是数字 -> 您希望它是真的。你只需要

while (Number.isNaN(midday) || midday > 50)