【问题标题】: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

标签: javascript nan do-while


【解决方案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。另外,请停止尖叫。
    • 尖叫意味着使用所有大写字母;粗体字是强调评论或评论的一种手段...不要太敏感。
    猜你喜欢
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多