当答案超出数字范围或不是数字时做[重复]
Posted
技术标签:
【中文标题】当答案超出数字范围或不是数字时做[重复]【英文标题】:do while answer is outside of number range or not a number [duplicate] 【发布时间】:2018-01-27 18:07:45 【问题描述】:我创建了一个简单的prompt
,它允许用户输入一个介于 1 和 10 之间的数字。首先我将 answer
从一个字符串更改为一个数字。其次,我检查answer
是介于 1 和 10 之间还是 NaN
。如果 answer
在 1 和 10 或 NaN
之外,则循环运行并再次检查。 while
正确检测数字是否小于 1 或大于 10,但它不能正确检测 answer == NaN
。我不确定为什么它不适用于字母,因为alert
表示当我输入字母时答案 = NaN
。谁能看到我做错了什么?
var answer;
do
answer = prompt("Enter a number between 1 and 10.");
answer = Number(answer);
while (answer < 1 || answer > 10 || answer == NaN);
alert(answer);
【问题讨论】:
NaN !== NaN
。赞美IEEE754。使用Number.isNaN
。否则,answer == NaN
将总是为假。
如果你不想在互联网爆炸中失败,也可以直接isNaN
:p
【参考方案1】:
要检测答案是否为 NaN,您可以使用 isNaN() 函数。
更新
就浏览器支持而言,所有主流浏览器都支持Number.isNaN()
,Internet Explorer 除外。 IE 支持全局isNaN()
函数。
【讨论】:
【参考方案2】:一般来说,(尽管在这里没有区别)最好使用Number.isNan
而不是isNaN
。因此,为了获得最佳效果,请尝试以下操作:
var _isNaN = Number.isNaN || isNaN;
var answer;
do
answer = prompt("Enter a number between 1 and 10.");
answer = parseInt(answer, 10);
while (answer < 1 || answer > 10 || _isNaN(answer));
alert(answer);
另外,请注意使用parseInt
比使用Number
构造函数更好。
【讨论】:
如果您的目标是 Microsoft 浏览器,Number.isNaN 仅在 Edge 中受支持,而在 中不支持Internet Explorer. 这就是为什么我们将默认设置为isNaN
。另外,请停止尖叫。
尖叫意味着使用所有大写字母;粗体字是强调评论或评论的一种手段...不要太敏感。以上是关于当答案超出数字范围或不是数字时做[重复]的主要内容,如果未能解决你的问题,请参考以下文章