当答案超出数字范围或不是数字时做[重复]

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。另外,请停止尖叫。 尖叫意味着使用所有大写字母;粗体字是强调评论或评论的一种手段...不要太敏感。

以上是关于当答案超出数字范围或不是数字时做[重复]的主要内容,如果未能解决你的问题,请参考以下文章

数组中重复数字

PHP Javascript?当用户关闭页面或浏览器时做一些事情[重复]

算法剑指Offer03-数组中重复的数字

索引超出了数组的范围[重复]

具有重复连续数字的范围

验证是否为罗马数字[重复项]